C# 在Roslyn中添加模块作为参考
我试图用Roslyn Microsoft.Codeanalysis库实现以下基于csc命令的编译C# 在Roslyn中添加模块作为参考,c#,roslyn,roslyn-code-analysis,C#,Roslyn,Roslyn Code Analysis,我试图用Roslyn Microsoft.Codeanalysis库实现以下基于csc命令的编译 csc /target:library /out:UserControlBase.dll UserControlBase.cs /addmodule:"c:\artifacts\MyLib.netmodule" 以下是对Roslyn的相同实施 var compilation = await project.GetCompilationAsync(); //Add Module compilatio
csc /target:library /out:UserControlBase.dll UserControlBase.cs /addmodule:"c:\artifacts\MyLib.netmodule"
以下是对Roslyn的相同实施
var compilation = await project.GetCompilationAsync();
//Add Module
compilation.AddReferences(ModuleMetadata.CreateFromFile(@"c:\artifacts\MyLib.netmodule").GetReference());
compilationStatus = compilation.Emit(outputFolderPath + @"\Test1.dll", outputFolderPath + @"\Test1.pdb");
if (!compilationStatus.Success)
{
foreach (var item in compilationStatus.Diagnostics)
{
Console.WriteLine(item);
}
}
问题:
.Netmodule未添加到项目中,由于未从Netmodule解析引用,编译失败
有人知道添加这个的正确方法吗
我使用的是Microsoft.CodeAnalysis1.0.0,我知道这有点过时,但答案可能对其他人有用 罗斯林的一切都是不变的。因此,调用compilation.AddReference不会将引用添加到您拥有的编译对象中,而是基于原始对象创建一个新的编译对象,其中包含其他引用 因此,要使其工作,您需要在AddReference调用返回的对象中调用Emit。您可以只替换编译变量:
compilation = compilation.AddReferences(ModuleMetadata.CreateFromFile(@"c:\artifacts\MyLib.netmodule").GetReference());
或者使用新变量并从中调用Emit:
var compWithRefs = compilation.AddReferences(ModuleMetadata.CreateFromFile(@"c:\artifacts\MyLib.netmodule").GetReference());
compilationStatus = compWithRefs.Emit(outputFolderPath + @"\Test1.dll", outputFolderPath + @"\Test1.pdb");
我知道这有点陈旧,但答案可能对其他人有用 罗斯林的一切都是不变的。因此,调用compilation.AddReference不会将引用添加到您拥有的编译对象中,而是基于原始对象创建一个新的编译对象,其中包含其他引用 因此,要使其工作,您需要在AddReference调用返回的对象中调用Emit。您可以只替换编译变量:
compilation = compilation.AddReferences(ModuleMetadata.CreateFromFile(@"c:\artifacts\MyLib.netmodule").GetReference());
或者使用新变量并从中调用Emit:
var compWithRefs = compilation.AddReferences(ModuleMetadata.CreateFromFile(@"c:\artifacts\MyLib.netmodule").GetReference());
compilationStatus = compWithRefs.Emit(outputFolderPath + @"\Test1.dll", outputFolderPath + @"\Test1.pdb");
“我使用的是Microsoft.CodeAnalysis1.0.0”这很古老,为什么不使用更新的版本呢?虽然它可能无法解决您的问题。@svick我在上面的VS扩展中使用的是,旧版本的VS不支持leatest Roslyn,参考:“我使用的是Microsoft.CodeAnalysis 1.0.0”,这是一个古老的版本,您为什么不使用更新的版本呢?虽然它可能无法解决您的问题。@svick我在上面的VS扩展中使用的是,VS的旧版本不支持leatest Roslyn,参考: