使用Microsoft.Build.Evaluation.Project加载csproj时遇程序集加载异常求助
问题原因与解决方案
核心原因
你遇到的问题是Microsoft.Build NuGet包依赖不完整,且可能存在架构匹配问题:17.x版本的Microsoft.Build需要配套的Microsoft.Build.Framework等组件,单独引用Microsoft.Build会导致依赖缺失;同时x86和x64版本的.NET环境混用,也会触发组件加载失败。
解决步骤
1. 安装完整的MSBuild依赖包
只装Microsoft.Build不够,必须同时安装以下同版本的NuGet包:
Microsoft.Build(17.9.5)Microsoft.Build.Framework(17.9.5)Microsoft.Build.Utilities.Core(17.9.5)Microsoft.Build.Tasks.Core(17.9.5)
确保所有包版本完全一致,避免版本冲突。
2. 统一项目与运行时架构
- 检查工具项目的目标平台:右键项目 → 属性 → 生成 → 目标平台,选择
x64(对应C:\Program Files\dotnet的64位SDK),如果必须用x86则切换到C:\Program Files (x86)\dotnet的32位环境,不要混合架构。 - 运行工具时,确保使用对应架构的dotnet命令,比如x64环境用
C:\Program Files\dotnet\dotnet.exe启动。
3. 手动指定MSBuild路径(兜底方案)
如果自动加载还是失败,直接指定本地SDK中的MSBuild路径初始化ProjectCollection,绕开依赖加载问题:
// 替换为你安装的.NET 6 SDK对应的MSBuild路径 var msbuildToolPath = @"C:\Program Files\dotnet\sdk\6.0.420\MSBuild\Current\Bin"; var projectCollection = new ProjectCollection(new Dictionary<string, string> { { "MSBuildToolsPath", msbuildToolPath }, { "MSBuildExtensionsPath", msbuildToolPath } }); // 加载项目 var project = projectCollection.LoadProject(@"你的项目文件路径.csproj");
4. 配置项目的RuntimeIdentifier
在工具项目的csproj中添加明确的RuntimeIdentifier,确保运行时加载对应架构的组件:
<PropertyGroup> <!-- 根据目标架构选择,比如win-x64或win-x86 --> <RuntimeIdentifier>win-x64</RuntimeIdentifier> </PropertyGroup>
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

