2016-10-04 4 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が彼の素晴らしいContinuousアプリケーションのILのカスタム通訳をしたことを知っています。

同様のアプローチをとっていますが、私はC#をサポートしたいので、Roslynが出力するSemanticModelSyntaxTreesから直接的に想像しています。

ロザリンのかなり巨大なコードベースについては、私の通訳の基礎を築くためにいくつかのビットがありますか?

タイプを動的に生成する可能性がない別の質問として、実行時に動的に宣言されたタイプをどのように表現できますか?

ありがとうございます!

+0

フランクのContinuous github https://github.com/praeclarum/Continuousプロジェクトを見たことがありますか? –

答えて

0

iOSのエコシステムでは、動的に生成されたコードを使用できません。また、iOSプラットフォームの法的制限の一部です。

関連する問題