C# Roslyn编译无法解析单元测试中的com引用

C# Roslyn编译无法解析单元测试中的com引用,c#,roslyn,roslyn-code-analysis,C#,Roslyn,Roslyn Code Analysis,我编写了一个编译外部解决方案的单元测试。此解决方案中的一个项目具有COM引用(SHDocVW)。当Roslyn试图编译此项目时,它给出了一个编译错误,无法解析此引用 当我尝试在控制台测试应用程序中执行相同的操作时,编译成功,找到了COM引用 var solution = msWorkspace.OpenSolutionAsync(solutionPath).Result; foreach (var project in solution.Projects) { var compilati

我编写了一个编译外部解决方案的单元测试。此解决方案中的一个项目具有COM引用(SHDocVW)。当Roslyn试图编译此项目时,它给出了一个编译错误,无法解析此引用

当我尝试在控制台测试应用程序中执行相同的操作时,编译成功,找到了COM引用

var solution = msWorkspace.OpenSolutionAsync(solutionPath).Result;
foreach (var project in solution.Projects)
{
    var compilation = project.GetCompilationAsync().Result;
    var diag = compilation.GetDiagnostics();
    if (diag.Any(d => d.Severity == DiagnosticSeverity.Error))
    {
        Debug.WriteLine($"Error compiling project {project.Name}");
    }
}
当我使用procmon(系统内部)查看他试图解析SHDocVW dll的位置时,我看到在控制台应用程序中,他查找外部解决方案的obj文件夹,在那里他找到了该dll。对于单元项目,他甚至不尝试解析dll。手动将dll复制到单元测试的输出文件夹不会改变行为

这种行为可以很容易地在小型测试项目中重现

我不确定这个问题是由Roslyn引起的,似乎他只是在单元测试期间没有尝试解决这些COM引用


有人知道如何解决这个问题吗?

看起来您的输出文件夹中没有
Microsoft.Build.Utilities.Core.dll

安装软件包Microsoft.Build.Utilities.Core-版本15.1.1012


MSBuildWorkspace
在项目中遇到一些问题,并且。在MSBuildWorkspace中加载和编译解决方案的代码在单元测试中与在控制台应用程序中相同。在控制台应用程序中,编译可以工作,而在单元测试中则不能。因此,MSBuildWorkspace本身似乎没有问题。