2016-08-31 12 views
1

新しいCoreランタイムにいくつかの.netコードを移植しようとしていますが、 - ザフライコンパイル。.net Core amd Roslyn CSharpCompilation、タイプ 'Object'は参照されていないアセンブリで定義されています

再開するには、System.Runtimeとmscorlibへの参照が必要ですが、参照方法についてのヒントはありません。

フレームワーク4.6を参照することはできません。プロジェクトが.netコアのLinuxマシンに公開される必要があるためです。 (私の実際のプロジェクトで)

 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-beta3に

ロスリンと、その場でコンパイルする方法上の任意のアイデアをと.NETのコアを使用していますか?

答えて

2

[OK]を、それが最終的に取り組んだ:

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"); 

私はハードコードので、それを好きではないが、それが仕事を得るための唯一の方法だと思われます。

乾杯。

+0

この問題は修正されました。十分にありがとうございます。 – Dillanm

関連する問題