gpt4 book ai didi

c# - .net Core amd Roslyn CSharpCompilation,类型 'Object' 在未引用的程序集中定义

转载 作者:可可西里 更新时间:2023-11-01 08:42:53 25 4
gpt4 key购买 nike

我正在尝试将一些 .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");

它总是提示需要 mscorlib(在这个例子中)和 System.Runtime(在我的真实项目中)。

我使用的是 Microsoft.CodeAnalysis.CSharp 包版本 2.0.0-beta3

关于如何使用 Roslyn 和 .net Core 进行即时编译有什么想法吗?

最佳答案

好的,它终于工作了:

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

我不喜欢它,因为硬编码,但它似乎是让它工作的唯一方法。

关于c# - .net Core amd Roslyn CSharpCompilation,类型 'Object' 在未引用的程序集中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39257074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com