【问题标题】:How to load solution in Roslyn?如何在 Roslyn 中加载解决方案?
【发布时间】:2023-04-01 05:38:01
【问题描述】:

这是我曾经工作的代码:

MSBuildWorkspace msBuild = MSBuildWorkspace.Create();
Solution sln = await msBuild.OpenSolutionAsync(solutionPath);

但现在我明白了:

int pr = sln.Projects.Count();//is 1 instead of 2.

和:

int docs = sln.Projects.First().Documents.Count();//is 0

他们又改了吗?

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

【问题讨论】:

    标签: c# roslyn roslyn-code-analysis


    【解决方案1】:

    我的做法是这样的:

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

    我相信MSBuildLocator.RegisterDefaults() 是这里缺少的部分。它确保了您的 VS 版本的正确 msbuild 路径。可能是您的环境路径是正确的,但是您安装了另一个 VS 实例,它不知何故感到困惑

    【讨论】:

    • 我目前无法测试它,但我确实在项目创建后安装了新版本的 VS,所以绝对值得一试。谢谢!
    • 此时,或多或少需要使用 MSBuildLocator,因为 VS2017 现在允许多次安装和一些额外的复杂性。这是 MSBuild 不再全局安装的副作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    相关资源
    最近更新 更多