You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何应用会引用MSBuild Framework 15.1.0.0?如何解决?

问题原因分析
  1. 间接依赖传递:你引用的某个NuGet包或项目依赖的其他程序集内部依赖了MSBuild 15.1.0.0版本,这个隐性依赖被构建系统检测到后,自动将其设为了主版本。
  2. 自动绑定重定向优先级:Visual Studio的自动绑定重定向机制会遍历所有依赖的版本,生成它认为最优的重定向规则,一旦判定15.1.0.0是合适的主版本,就会覆盖你手动添加的重定向配置。
  3. 旧版本残留:项目目录的bin/obj缓存、NuGet本地缓存或全局程序集缓存(GAC)中可能存在15.1.0.0版本的MSBuild程序集,构建时被优先识别并选用。
解决方法

1. 强制锁定MSBuild版本

在项目的.csproj文件中明确指定要使用的MSBuild包版本,并配置绑定重定向的生成规则,确保自动生成的重定向指向目标版本:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
<ItemGroup>
  <!-- 明确引用目标版本的MSBuild包,覆盖间接依赖 -->
  <PackageReference Include="Microsoft.Build" Version="17.3.1" />
  <PackageReference Include="Microsoft.Build.Framework" Version="17.3.1" />
  <PackageReference Include="Microsoft.Build.Engine" Version="17.3.1" />
  <!-- 根据实际使用的MSBuild组件添加对应的引用 -->
</ItemGroup>

2. 定位并处理间接依赖

用NuGet命令找出传递依赖中引用15.1.0.0的包:

dotnet list package --include-transitive

找到对应的依赖包后:

  • 如果该包有更新版本,直接升级到最新版,通常新版本会修复旧的MSBuild依赖问题;
  • 若无法升级,在项目文件中添加配置忽略版本冲突并强制使用指定版本:
    <PackageReference Include="问题包名称" Version="当前使用版本">
      <NoWarn>NU1605</NoWarn>
    </PackageReference>
    

3. 禁用自动重定向,手动维护规则

如果自动重定向始终覆盖手动配置,直接禁用自动生成,完全手动管理绑定重定向:
首先在.csproj中关闭自动生成:

<PropertyGroup>
  <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>

然后在app.config中添加完整的重定向规则,覆盖所有可能的旧版本范围:

<dependentAssembly>
  <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-17.3.1.0" newVersion="17.3.1.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="Microsoft.Build" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-17.3.1.0" newVersion="17.3.1.0" />
</dependentAssembly>
<!-- 其他用到的MSBuild组件(如Microsoft.Build.Engine、Microsoft.Build.Utilities.Core等)都需要添加对应重定向 -->

4. 清理缓存与残留文件

  • 删除项目根目录下的bin和obj文件夹,重新构建项目;
  • 清理NuGet本地缓存:
    dotnet nuget locals all --clear
    
  • 检查全局程序集缓存(GAC)中是否存在15.1.0.0版本的MSBuild程序集,若存在,可使用管理员权限执行以下命令移除(注意:此操作可能影响其他依赖旧版本的项目,需谨慎):
    gacutil /u Microsoft.Build.Framework,Version=15.1.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a
    

内容的提问来源于stack exchange,提问作者Victor Chelaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:15:46