我正在尝试直接从我正在处理的Xamarin.iOS代码编辑器应用程序生成并执行一些C#代码。我使用Roslyn进行所有编译步骤,但遗憾的是,Mono不允许您在iOS上的运行时加载程序集。
因此,此代码通常会抛出Attempting to JIT compile method while running with --aot-only
异常。
var tree = CSharpSyntaxTree.ParseText(@"public Foo
{
public void Bar() { Console.WriteLine(""""foo"""");
}");
var compilation = CSharpCompilation.Create(
"Generated." + Guid.NewGuid(),
syntaxTrees: new[] { tree },
references: references,
options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
using (var ms = new MemoryStream())
{
var result = compilation.Emit(ms);
var assembly = Assembly.Load(ms); // <- Thrown here
}
我知道Frank A. Krueger为他那令人敬畏的Continuous应用程序为IL做了一个自定义解释器。
我想有一个类似的方法,但直接来自Roslyn输出的SemanticModel
和SyntaxTrees
因为我只想支持C#。
关于Roslyn非常庞大的代码库,我可以提供一些基于我的解释器的位吗?
另一个问题,如果没有动态生成类型的可能性,我怎样才能在运行时表示那些动态声明的类型?
谢谢!
答案 0 :(得分:0)
iOS上的生态系统不允许动态生成代码。它也是iOS平台法律限制的一部分。