Roslyn加载.NET 5项目连续报错无法正常运行问题求助
问题原因
你遇到的报错本质是MSBuild实例未正确注册,导致SDK相关路径解析错误,并非缺少核心NuGet包。手动添加MSBuildSDKsPath环境变量会破坏MSBuild的默认路径匹配逻辑,才会出现第二个找不到Microsoft.Common.props的报错。
解决方案
按以下步骤操作即可解决:
- 第一步:删除你手动添加的
MSBuildSDKsPath系统/用户环境变量,避免路径解析冲突。 - 第二步:给项目新增NuGet包引用
Microsoft.Build.Locator(匹配你当前的MSBuild版本即可,默认装最新稳定版也兼容)。 - 第三步:修改你加载项目的代码,在创建
MSBuildWorkspace之前先注册本地MSBuild实例,修改后的代码如下:
using System; using Microsoft.Build.Locator; using Microsoft.CodeAnalysis.MSBuild; namespace Metrics5 { class Program { static void Main(string[] args) { // 优先注册MSBuild实例,必须放在所有调用MSBuild相关逻辑的前面 if (!MSBuildLocator.IsRegistered) { MSBuildLocator.RegisterDefaults(); } using var workspace = MSBuildWorkspace.Create(); workspace.LoadMetadataForReferencedProjects = true; var currentProject = workspace.OpenProjectAsync(@"C:\work\Metrics5\Metrics5.csproj").Result; var diagnostics = workspace.Diagnostics; foreach(var diagnostic in diagnostics) { Console.WriteLine(diagnostic.Message); } } } }
- 第四步:确认你程序的运行架构和本地安装的.NET 5 SDK架构一致,如果你装的是x64版本的.NET 5 SDK,就不要把程序设置为x86运行,建议设置为Any CPU优先。
- 可选方案:如果你不想改代码,直接用
dotnet run命令启动你的程序即可,dotnet CLI会自动注入所有正确的MSBuild相关环境变量,无需额外配置。
内容的提问来源于stack exchange,提问作者Giedrius
相关产品推荐
相关产品推荐

