有一种方法可以访问类实例的属性,这些类实例是使用roslyn在c#中编译的内存代码创建的。

问题描述 投票:0回答:1
[我正在尝试创建一个简单的方法,该方法将编译一些任意类,然后使用.Net Core 3.0和Roslyn编译器让我访问这些类的属性。

我已经成功获取了要编译的代码并创建了实例,但是由于所有内容都是静态和私有的,因此它看起来像。

这里是代码:

private void ExecuteOnCompileCommand() { var code = @" using System; namespace CompileTest { public class Test { public int y { get; set; } public int x { get; set; } } }"; var system = MetadataReference.CreateFromFile(typeof(object).Assembly.Location); var compilation = CSharpCompilation.Create( "_" + Guid.NewGuid().ToString("D"), syntaxTrees: new SyntaxTree[] { CSharpSyntaxTree.ParseText(code) }, references: new [] {system }, options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); using (var ms = new MemoryStream()) { var compilationResult = compilation.Emit(ms); if (compilationResult.Success) { ms.Seek(0, SeekOrigin.Begin); _assembly = Assembly.Load(ms.ToArray()); } } //create instance of class var instance = _assembly.CreateInstance(_assembly.DefinedTypes.First().FullName); }

编译并运行后,我在方法末尾遇到一个断点,可以看到x和y,它表示它是Test类型的,但是我无法设置这些变量,甚至无法将另一个变量设置为他们的价值。

我正在尝试创建一个简单的方法,该方法将编译一些任意类,然后使用.Net Core 3.0和Roslyn编译器让我访问这些类的属性。我已经成功获得...

c# .net-core compilation roslyn
1个回答
0
投票
不是以通常的方式,而是
© www.soinside.com 2019 - 2024. All rights reserved.