2017-12-15 16 views
1

내 프로젝트에서 Roslyn 스크립트 API를 사용하려고합니다. 나는 시험 콘솔 응용 프로그램을 생성하고 코드가 InteractiveAssemblyLoaderInteractiveAssemblyLoader가 콘솔 앱에서 작동하지 않습니다.

사용 referencies를 해결하기 위해 노력했습니다

var scriptText = @" 
    using System; 
    using Test.Namespace.From.Referenced.Dll; 

    var y = new TestType(); 
    var x = y.GetStringDescription(); 

    return x; 
"; 

using (var interactiveLoader = new InteractiveAssemblyLoader()) 
{ 
    interactiveLoader.RegisterDependency(typeof(TestType).Assembly); 

    var script = CSharpScript.Create<string>(
     scriptText, 
     globalsType: typeof(Globals), 
     options: ScriptOptions.Default, 
     assemblyLoader: interactiveLoader 
    ); 

    script.Compile(); 

    // exception raised here 
    var result = await script.RunAsync(globals); 
} 

이 코드는 예외로 실패가

'형식 또는 네임 스페이스 이름'TEST ' 찾을 수 없습니다 ( a 지시문 또는 어셈블리 참조가 없습니다)? System.Exception {Microsoft.CodeAnalysis.Scripting.CompilationErrorException} '

Windows 콘솔 앱, .NET 4.7.1.

내가 뭘 잘못하고있어?

답변

0

업데이트. 의견에서 메모리 내 어셈블리를 참조하려고 했으므로 다음과 같이 시도하십시오.

byte[] assemblyBytes = DownloadAssembly(); 
using (var interactiveLoader = new InteractiveAssemblyLoader()) { 
    interactiveLoader.RegisterDependency(Assembly.Load(assemblyBytes)); 
    var script = CSharpScript.Create<string>(
     scriptText, 
     globalsType: typeof(Globals), 
     options: ScriptOptions.Default.AddReferences(MetadataReference.CreateFromStream(new MemoryStream(assemblyBytes))), 
     assemblyLoader: interactiveLoader 
    ); 

    script.Compile(); 
    var result = await script.RunAsync(globals); 
} 
+0

쉽지 않습니다. 메모리 내 라이브러리를 해결하려고합니다. 그것이 내 앱에서 플러그인 시스템이 작동하는 방식입니다. 플러그인이있는 라이브러리는 서버에서 다운로드하고 메모리에로드합니다. 그리고이 라이브러리에 대한 참조를 스크립트에 추가하려고합니다. 이 기사에 따르면 https://www.strathweb.com/2016/03/roslyn-scripting-on-coreclr-net-cli-and-dnx-and-in-memory-assemblies/에 따르면 작동하지만 그렇지 않습니다. . 어쩌면 내가 뭔가를 오해 한 것일 수 있습니다. –

+0

그래서 메모리 내 라이브러리가 있습니다. 왜 그것을 AddReferences를 통해 참조에 추가 할 수 없습니까? 링크가 나를 위해 작동하지 않습니다. – Evk

+0

Roslyn은로드 할 디스크에서 라이브러리를 읽어야합니다. 위치없이 dll을 참조 할 수 없습니다. AddReferences가 예외를 발생시킵니다. –