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

标签 c# roslyn roslyn-code-analysis

这是我曾经工作过的代码:

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

他们又改了吗?

(如果重要,我需要解决方案以便遍历字段等并使用 Renamer.RenameSymbolAsync 。)

最佳答案

我的做法是这样的:

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

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

关于c# - 如何在 Roslyn 中加载解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61048374/

相关文章:

c# - 如何在 Roslyn 中查找具有特定名称的字段类型

c# - 在 System.Windows.Controls.Image 控件中显示 System.Drawing.Bitmap 对象

c# - Roslyn:检索父级或祖先 SyntaxNode 中的符号

c# - 如何将 Expression 转换为 CSharpCompilation 或 CSharpSyntaxTree?

c# - 如何获取方法中使用的内部变量的名称

c# - 合并两个限定名称

c# - 尝试通过安全透明方法 'Microsoft.Web.Helpers.PreApplicationStartCode.Start()' 访问安全关键方法

c# - 正则表达式不适用于 Linq to Sql

C#编程如何通过正则表达式对空格和 ","进行分词?