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

每两次构建触发MSB4018错误:System.Text.Json缺失且.deps.json文件为空

解决C++/CLI项目隔次构建失败(System.Text.Json版本不匹配问题)

问题背景

VS2019开发的32位C++/CLI项目,基于.NET SDK 6.0.135部署在构建服务器上,依赖System.Text.Json但未显式引用其NuGet包。构建出现隔次失败现象,报错:

Error MSB4018: The "GenerateDepsFile" task failed unexpectedly. System.IO.FileNotFoundException: Could not load file or assembly 'System.Text.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.

高级日志显示失败时.deps.json文件缺失或为空,且构建进程错误加载了4.x版本的System.Text.Json.dll(来自VS2019 MSBuild目录或.NET SDK工具目录),而非6.0版本;若保留.deps.json则构建成功。

已尝试无效的方案

  • 手动清理bin/obj目录:仅临时生效,隔次构建问题仍存在
  • 对比正常运行的.NET SDK 6.0.133机器:未发现关键差异
  • 启用程序集绑定日志:确认.NET Framework环境下加载旧版本程序集导致兼容性失败

有效解决方案

1. 显式添加System.Text.Json NuGet包引用

强制构建系统使用与SDK匹配的版本,避免自动查找时加载旧版本:

  • 在NuGet包管理器中安装System.Text.Json,版本选择6.0.135(与当前.NET SDK版本一致)
  • 或直接在项目文件中添加:
    <PackageReference Include="System.Text.Json" Version="6.0.135" />
    

2. 添加程序集绑定重定向

通过重定向配置,让MSBuild进程加载正确的6.0版本程序集:

  • 在项目的app.config中添加以下内容:
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    
  • 若构建服务器为全局问题,可修改VS2019的MSBuild配置文件(路径:C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MSBuild.exe.config)添加上述重定向。

3. 强制生成完整的.deps.json文件

确保增量构建时也能生成包含System.Text.Json的.deps.json:

  • 在项目文件中添加配置:
    <PropertyGroup>
      <GenerateDepsFile>True</GenerateDepsFile>
      <DepsFilePath>$(OutputPath)$(AssemblyName).deps.json</DepsFilePath>
    </PropertyGroup>
    
  • 同时在构建脚本中添加检查步骤:若.deps.json不存在,则触发完整重建(而非增量构建)。

4. 显式指定构建使用的SDK版本

避免构建进程加载旧版本工具集:

  • 使用dotnet build命令时指定SDK版本:
    dotnet build --sdk-version 6.0.135 YourProject.vcxproj
    
  • 或在项目文件中设置:
    <PropertyGroup>
      <DotNetCliToolVersion>6.0.135</DotNetCliToolVersion>
    </PropertyGroup>
    

问题根源分析

隔次失败的核心是增量构建的进程复用机制:

  • 第一次构建为完整构建:生成正确的.deps.json,加载SDK中的6.0版本System.Text.Json,构建成功
  • 第二次构建为增量构建:MSBuild复用之前的进程,该进程已加载VS2019或SDK工具目录中的4.x版本程序集,导致版本不匹配,构建失败
  • 第三次构建因失败触发完整清理重建,再次生成正确文件,循环往复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:22:38