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

VS2019下.NET Standard与.NET Framework项目ServiceStack程序集绑定冲突求助

解决ServiceStack程序集绑定冲突的步骤

这是典型的跨.NET平台(.NET Standard + .NET Framework)使用ServiceStack时遇到的程序集绑定冲突问题,我来一步步帮你解决:

1. 先彻底清理并重新生成解决方案

首先要排除编译缓存带来的问题:

  • 手动删除Foo和Bar项目下所有的bin和obj文件夹
  • 在VS中依次执行「清理解决方案」→「重新生成解决方案」
  • 检查Bar项目输出目录,确认只有带公钥令牌02c12cbda47e6587的5.0.0.0版本ServiceStack.Interfaces.dll存在

2. 修正绑定重定向配置(核心步骤)

你的错误提示是找不到无公钥令牌的5.0.0.0版本ServiceStack.Interfaces,但实际部署的是带公钥的版本。因此需要在Bar的app.config中同时处理无公钥和有公钥的引用请求:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- 处理无公钥的ServiceStack.Interfaces引用 -->
    <dependentAssembly>
      <assemblyIdentity name="ServiceStack.Interfaces" publicKeyToken="null" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
    <!-- 处理有公钥的ServiceStack.Interfaces引用 -->
    <dependentAssembly>
      <assemblyIdentity name="ServiceStack.Interfaces" publicKeyToken="02c12cbda47e6587" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
    <!-- 别忘了添加其他ServiceStack核心dll的重定向,比如ServiceStack.dll -->
    <dependentAssembly>
      <assemblyIdentity name="ServiceStack" publicKeyToken="02c12cbda47e6587" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

这里的关键是覆盖无公钥版本的重定向,把所有对无公钥ServiceStack.Interfaces的请求,都指向你实际存在的带公钥版本。

3. 验证项目引用和NuGet包一致性

  • 确认Foo和Bar的ServiceStack NuGet包版本都是5.5.0,没有手动添加的本地dll引用(检查项目引用列表,ServiceStack相关项应该显示为「NuGet: ServiceStack 5.5.0」)
  • 可以用dnSpy或ildasm工具查看Foo.dll的依赖,确认它引用的ServiceStack.Interfaces是带公钥的5.0.0.0版本,而非无公钥版本

4. 检查Windows服务安装目录

如果你用InstallUtil安装服务:

  • 确保安装目录下的所有ServiceStack相关dll,都是直接从Bar项目输出目录复制过来的,没有混入旧版本或无公钥的dll
  • 用命令sn -T ServiceStack.Interfaces.dll验证公钥令牌是否为02c12cbda47e6587

5. 启用自动绑定重定向(可选辅助)

在Bar项目的属性→「应用程序」选项卡中,勾选「自动生成绑定重定向」,然后重新生成项目。VS会自动检测依赖冲突并生成最优的重定向配置,可能会帮你自动补上无公钥版本的重定向规则。

为什么会出现这个问题?

ServiceStack 5.x版本中,.NET Standard和.NET Framework的程序集文件版本统一显示为5.0.0.0(对应NuGet包版本5.5.0)。你的.NET Standard类库Foo在编译时,可能默认引用了无公钥的ServiceStack.Interfaces版本,导致.NET Framework主机Bar在运行时尝试查找无公钥的dll,而实际部署的是带公钥的版本,最终触发绑定冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:46:38