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

本地正常TeamCity报错:System.Runtime.CompilerServices.Unsafe版本不匹配

解决System.Runtime.CompilerServices.Unsafe版本不匹配的TeamCity执行报错

检查TeamCity的NuGet还原配置

  • 确保TeamCity构建步骤里的NuGet还原操作,优先读取项目本地的packages.config或PackageReference配置,而非依赖全局缓存的旧版本。部分场景下,TeamCity会用缓存中的4.0.4.1版本覆盖你指定的6.0.0版本,引发版本冲突。
  • 可以在构建前置步骤中添加清理缓存命令:dotnet nuget locals all --clear,或者在NuGet还原步骤里勾选「清理缓存」选项。

验证绑定重定向是否同步到输出目录

  • 本地运行时VS会自动将app.config的绑定重定向生成到测试项目输出的[测试项目名].exe.config中,但TeamCity构建时可能未完成这个同步。检查构建后的测试输出目录,确认配置文件里存在以下节点:
    <dependentAssembly>
      <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
    </dependentAssembly>
    
  • 如果缺失,手动在测试项目的app.config中明确添加该节点,并确保TeamCity构建过程不会覆盖这个文件。

统一测试运行器版本

  • 部分旧版本的测试运行器(如NUnit、xUnit)自身依赖System.Runtime.CompilerServices.Unsafe的4.0.4.1版本,若TeamCity使用的测试运行器和你本地版本不一致,就会引发冲突。
  • 升级TeamCity上的测试运行器至最新稳定版,同时在测试项目中直接引用对应测试运行器的最新NuGet包,保证依赖链统一。

在项目文件中强制指定版本

  • 打开测试项目的.csproj文件,添加以下配置,强制依赖6.0.0版本的程序集,避免依赖解析时自动选择旧版本:
    <ItemGroup>
      <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" PrivateAssets="all" />
    </ItemGroup>
    
  • 若是packages.config格式,确认其中的版本配置为<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="..." />,且没有其他关联项目引用旧版本。

检查构建代理的GAC缓存

  • 极少数情况下,TeamCity构建代理机器的全局程序集缓存(GAC)中可能存在4.0.4.1版本的程序集,导致构建时优先加载该版本。在代理机器上执行gacutil /l System.Runtime.CompilerServices.Unsafe查看,若存在旧版本,用gacutil /u System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1卸载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:52:36