我正在尝试使用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
答案 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");