2016-10-04 54 views
0

我目前正试图直接从我正在处理的Xamarin.iOS代码编辑器应用程序生成并执行一些C#代码。我在所有编译步骤中都使用Roslyn,但不幸的是,Mono不允许您在运行时在iOS上加载程序集。从Xamarin.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没有为IL自定义解释为他的真棒Continuous应用。

我想有一个类似的方法,但直接从Roslyn输出的SemanticModelSyntaxTrees,因为我只想支持C#。

关于Roslyn的非常庞大的代码库,是否有一些我可以拾取基于我的解释器?

另一个问题,没有动态生成类型的可能性,我怎么能在运行时表示那些动态声明类型?

谢谢!

+0

你见过伟大的弗兰克连续github https://github.com/praeclarum/Continuous项目? –

回答

0

iOS上的生态系统不允许动态生成代码。这也是iOS平台法律限制的一部分。