从Xamarin.iOS运行时生成执行程序集
问题描述:
我目前正试图直接从我正在处理的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输出的SemanticModel
和SyntaxTrees
,因为我只想支持C#。
关于Roslyn的非常庞大的代码库,是否有一些我可以拾取基于我的解释器?
另一个问题,没有动态生成类型的可能性,我怎么能在运行时表示那些动态声明类型?
谢谢!
答
iOS上的生态系统不允许动态生成代码。这也是iOS平台法律限制的一部分。
你见过伟大的弗兰克连续github https://github.com/praeclarum/Continuous项目? –