在Roslyn中添加模块作为参考

时间:2017-10-19 08:25:43

标签: c# roslyn roslyn-code-analysis

我正在尝试使用Roslyn Microsoft.Codeanalysis库实现以下基于csc命令的编译

SharedService

以下是与Roslyn相同的实现

csc /target:library /out:UserControlBase.dll UserControlBase.cs /addmodule:"c:\artifacts\MyLib.netmodule"

问题: .Netmodule没有被添加到项目中,并且由于未从netmodule解析引用而导致编译失败。

是否有人知道添加此内容的正确方法?

我正在使用Microsoft.CodeAnalysis 1.0.0

1 个答案:

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