我已经成功获取了要编译的代码并创建了实例,但是由于所有内容都是静态和私有的,因此它看起来像。
这里是代码:
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编译器让我访问这些类的属性。我已经成功获得...