일부 .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");
나는 그것을 좋아하지 않아 : 좋아
이 문제는 수정되었습니다. 충분히 감사 할 수 없습니다. – Dillanm