如何在 Roslyn 中加载解决方案?

isp*_*iro 3 c# roslyn roslyn-code-analysis

这是我曾经有效的代码:

MSBuildWorkspace msBuild = MSBuildWorkspace.Create();
Solution sln = await msBuild.OpenSolutionAsync(solutionPath);
Run Code Online (Sandbox Code Playgroud)

但现在我得到:

int pr = sln.Projects.Count();//is 1 instead of 2.
Run Code Online (Sandbox Code Playgroud)

和:

int docs = sln.Projects.First().Documents.Count();//is 0
Run Code Online (Sandbox Code Playgroud)

他们又改了吗?

(如果重要的话,我需要Solution迭代字段等并使用Renamer.RenameSymbolAsync。)

tim*_*mur 7

我这样做的方式是这样的:

if (!MSBuildLocator.IsRegistered) MSBuildLocator.RegisterDefaults();
using (var w = MSBuildWorkspace.Create())
    {
        var sln = await w.OpenSolutionAsync(solutionPath);
    }
Run Code Online (Sandbox Code Playgroud)

我相信这MSBuildLocator.RegisterDefaults()就是这里缺失的部分。它确保您的 VS 版本具有正确的 msbuild 路径。可能你的环境路径是正确的,但是你安装了另一个 VS 实例,它不知怎的就变得混乱了