如何在 Roslyn 中加载解决方案? [英] How to load solution in Roslyn?

查看:40
本文介绍了如何在 Roslyn 中加载解决方案?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我曾经可以工作的代码:

Here is my code that used to work:

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 .)

(If it matters, I need the Solution in order to iterate over fields etc. and use Renamer.RenameSymbolAsync .)

推荐答案

我的做法是这样的:

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

我相信 MSBuildLocator.RegisterDefaults() 是这里缺失的部分.它确保您 VS 版本的正确 msbuild 路径.可能是您的环境路径是正确的,但是您安装了另一个 VS 实例,并且不知何故弄糊涂了

I believe the MSBuildLocator.RegisterDefaults() is the missing piece here. it ensures the correct msbuild path for your VS version. It might be that your environment path was correct, but then you installed another instance of VS and it's got confused somehow

这篇关于如何在 Roslyn 中加载解决方案?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆