2016-10-04 2 views
0

현재 작업중인 Xamarin.iOS 코드 편집기 응용 프로그램에서 일부 C# 코드를 직접 생성하여 실행하려고합니다. 모든 컴파일 단계에 Roslyn을 사용하지만, 불행하게도 Mono는 iOS의 런타임시 어셈블리를로드 할 수 없습니다.Xamarin.iOS에서 런타임에 생성 된 어셈블리 실행

따라서이 코드는 일반적으로 Attempting to JIT compile method while running with --aot-only 예외를 throw합니다.

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#을 지원하기를 원하기 때문에 Roselyn이 출력 한 SemanticModelSyntaxTrees에서 직접 상상해보십시오.

Roslyn의 거대한 코드베이스에 관해서는 통역사의 기반이 될 수있는 비트가 있습니까?

유형을 동적으로 생성 할 수있는 가능성이없는 또 다른 질문은 런타임시 동적으로 선언 된 유형을 어떻게 표현할 수 있습니까?

감사합니다.

+0

위대한 프랭크의 Continuous github https://github.com/praeclarum/Continuous 프로젝트를 보았습니까? –

답변

0

iOS의 생태계는 동적으로 생성 된 코드를 허용하지 않습니다. 또한 iOS 플랫폼에 대한 법적 제한 사항의 일부입니다.

관련 문제