Gus*_*man 13 .net c# roslyn .net-core
我正在尝试将一些.net代码移植到新的Core运行时,并且我在移植一些动态编译时遇到了不好的时间.
要恢复,它总是要求我引用System.Runtime和mscorlib,但不知道如何引用它们.
作为旁注,我不能引用Framework 4.6,因为项目必须发布到带有.net Core的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");
Run Code Online (Sandbox Code Playgroud)
它总是抱怨mscorlib(在这个例子中)和System.Runtime(在我的真实项目中)的需要.
我正在使用Microsoft.CodeAnalysis.CSharp软件包版本2.0.0-beta3
关于如何使用Roslyn和.net Core动态编译的任何想法?
Gus*_*man 15
好吧,让它终于工作了:
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");
Run Code Online (Sandbox Code Playgroud)
我不喜欢它,因为硬编码,但它似乎是让它工作的唯一方法.
| 归档时间: |
|
| 查看次数: |
1653 次 |
| 最近记录: |