gpt4 book ai didi

c# - 使用 Roslyn 以编程方式编译源代码

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:36 24 4
gpt4 key购买 nike

所以我一直在尝试使用 Roslyn 以编程方式编译一段代码。由于某些原因,我添加的引用并没有出现在 Compilation 类中。因此,当我在使用“AddReferences”后查看引用的程序集时,列表是空的。因此,当我尝试发出时,我得到诊断中未定义的“对象”。谁能指出问题所在?

Microsoft.CodeAnalysis.SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(@"
public static class Program
{
public static void Main()
{
System.Console.WriteLine(""Hello"");
}
}
");
string autoreferences = @"mscorlib.dll,System.Core.dll";
List<string> usings = new List<string>();
string netAssembliesDirectory = Path.GetDirectoryName(typeof(object).Assembly.Location);
var refs = new List<string>();
foreach (string reference in autoreferences.Split(','))
refs.Add(netAssembliesDirectory + "\\" + reference);


CSharpCompilation compilation = CSharpCompilation.Create("ConsoleTest")
.WithOptions(
new CSharpCompilationOptions(OutputKind.ConsoleApplication).WithUsings("System"))
.AddSyntaxTrees(syntaxTree);
compilation.AddReferences(refs.Where(r => r != "").Select(r => MetadataReference.CreateFromFile(r)));
var er = compilation.Emit(@"C:\" + "ConsoleTest");

最佳答案

Roslyn 对象是不可变的。

compilation.AddReferences() 返回一个包含这些引用的新编译实例。
你忽略了那个新实例。

您需要在包含您的引用的编译实例上调用 Emit()

关于c# - 使用 Roslyn 以编程方式编译源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35272830/

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