2016-08-31 2 views
1

일부 .net 코드를 새 Core 런타임으로 이식하려고하는데 일부 작업을 포팅하는 데 시간이 많이 걸립니다. -the-fly 컴파일..net Core amd Roslyn CSharpCompilation, 'Object'가 참조되지 않은 어셈블리에 정의되었습니다.

다시 시작하려면 항상 System.Runtime 및 mscorlib에 대한 참조를 요청하지만이를 참조하는 방법에 대한 단서가 없습니다.

참고로, 프로젝트가 .net 코어가있는 Linux 컴퓨터에 게시되어야하기 때문에 Framework 4.6을 참조 할 수 없습니다. (내 실제 프로젝트에서)

 string testClass = @"using System; 
     namespace test{ 

     public class tes 
     { 

      public string unescape(string Text) 
      { 
      return Uri.UnescapeDataString(Text); 
      } 

     } 

     }"; 

     var compilation = CSharpCompilation.Create(Guid.NewGuid().ToString() + ".dll") 
      .WithOptions(new CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind.DynamicallyLinkedLibrary)) 
      .AddReferences(
      MetadataReference.CreateFromFile(typeof(Object).GetTypeInfo().Assembly.Location), 
      MetadataReference.CreateFromFile(typeof(Uri).GetTypeInfo().Assembly.Location) 
      ) 
      .AddSyntaxTrees(CSharpSyntaxTree.ParseText(testClass)); 

     var eResult = compilation.Emit("test.dll"); 

그것은 항상 (이 예에서) mscorlib에의 필요성에 대해 불평하고 System.Runtime :

이 최소 코드입니다.

나는 Microsoft.CodeAnalysis.CSharp 패키지 버전 2.0.0 - 베타 3

로슬린에 즉시 컴파일하는 방법에 대한 아이디어를 및 .NET 코어를 사용하고 있습니다? 하드 코딩,하지만 작동 얻을 수있는 유일한 방법 것 때문에

string testClass = @"using System; 
    namespace test{ 

    public class tes 
    { 

     public string unescape(string Text) 
     { 
     return Uri.UnescapeDataString(Text); 
     } 

    } 

    }"; 

    var dd = typeof(Enumerable).GetTypeInfo().Assembly.Location; 
    var coreDir = Directory.GetParent(dd); 

    var compilation = CSharpCompilation.Create(Guid.NewGuid().ToString() + ".dll") 
     .WithOptions(new CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind.DynamicallyLinkedLibrary)) 
     .AddReferences(
     MetadataReference.CreateFromFile(typeof(Object).GetTypeInfo().Assembly.Location), 
     MetadataReference.CreateFromFile(typeof(Uri).GetTypeInfo().Assembly.Location), 
     MetadataReference.CreateFromFile(coreDir.FullName + Path.DirectorySeparatorChar + "mscorlib.dll"), 
     MetadataReference.CreateFromFile(coreDir.FullName + Path.DirectorySeparatorChar + "System.Runtime.dll") 
     ) 
     .AddSyntaxTrees(CSharpSyntaxTree.ParseText(testClass)); 

    var eResult = compilation.Emit("test.dll"); 

나는 그것을 좋아하지 않아 : 좋아

답변

2

는, 마침내 작업을 얻었다.

건배.

+0

이 문제는 수정되었습니다. 충분히 감사 할 수 없습니다. – Dillanm

관련 문제