引用Microsoft.Build.Utilities.Core 17.4.0却提示无法解析15.1.0.0求助
解决Microsoft.Build.Utilities.Core版本不匹配问题
核心原因
Microsoft.Build系列属于强名称程序集,MSBuild运行时环境依赖的基础版本多为15.x系列(来自Visual Studio的MSBuild部署),即便你引用了17.4.0版本的NuGet包,也可能因为程序集绑定重定向未生效或NuGet包引用策略限制,导致编译后实际引用版本被回退到15.1.0.0。
具体解决步骤
1. 修正类库的NuGet引用配置
打开.NET Standard 2.0类库的.csproj文件,确保Microsoft.Build.Utilities.Core的引用配置正确,避免被隐式降级:
<ItemGroup> <PackageReference Include="Microsoft.Build.Utilities.Core" Version="17.4.0" PrivateAssets="all" /> </ItemGroup>
PrivateAssets="all"的作用是阻止该包被传递引用到控制台应用,避免跨项目的版本冲突。
2. 给控制台应用添加程序集绑定重定向
在.NET 6控制台应用的.csproj中启用绑定重定向,并显式引用同版本的包:
<PropertyGroup> <!-- 开启自动生成绑定重定向 --> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Build.Utilities.Core" Version="17.4.0" /> </ItemGroup>
编译后,找到输出目录里的[你的应用名].dll.config文件,手动补充绑定重定向规则:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Build.Utilities.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-17.4.0.0" newVersion="17.4.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
3. 直接引用VS安装目录的MSBuild程序集(备选方案)
如果NuGet方式仍无效,可跳过NuGet包,直接引用Visual Studio安装目录里的程序集。修改类库的.csproj:
<ItemGroup> <Reference Include="Microsoft.Build.Utilities.Core"> <HintPath>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\Microsoft.Build.Utilities.Core.dll</HintPath> <Private>True</Private> </Reference> </ItemGroup>
- 注意替换
HintPath为你的VS 2022实际安装路径(比如Professional/Enterprise版本对应目录);<Private>True</Private>确保程序集会被复制到输出目录。
4. 彻底清理后重新构建
- 删除所有项目的
bin和obj目录 - 执行
dotnet clean命令清理整个解决方案 - 重新执行
dotnet build或在VS中重新构建项目
验证方法
编译完成后,用dnSpy检查控制台应用输出目录中的Microsoft.Build.Utilities.Core.dll版本是否为17.4.0,同时确认应用的.dll.config文件包含正确的绑定重定向规则。
内容的提问来源于stack exchange,提问作者chandu
相关产品推荐
相关产品推荐

