Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Roslyn中添加模块作为参考_C#_Roslyn_Roslyn Code Analysis - Fatal编程技术网

C# 在Roslyn中添加模块作为参考

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

我试图用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
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,参考: