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

同一解决方案中两个API项目如何各自引用对应版本的Ninject包以避免加载冲突

解决同一解决方案中两个API项目使用不同Ninject.Web.Common版本的冲突问题

这是典型的.NET程序集版本冲突问题——默认情况下.NET运行时会倾向于加载找到的最新版本程序集,再加上可能的输出目录重叠,导致Web Api B意外加载了Web Api A的3.3.2版本Ninject.Web.Common。以下是无需修改现有项目依赖版本的解决方案:

1. 为每个项目配置独立的程序集绑定重定向

程序集绑定重定向可以强制项目加载指定版本的程序集,你需要在两个项目的Web.config中分别添加配置:

对于Web Api B(使用3.2.3版本)

在Web.config的<runtime>节点下添加:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Ninject.Web.Common" 
                      publicKeyToken="c7192dc5380945e7" 
                      culture="neutral" />
    <!-- 强制将所有旧版本请求重定向到3.2.3.0 -->
    <bindingRedirect oldVersion="0.0.0.0-3.3.2.0" 
                    newVersion="3.2.3.0" />
  </dependentAssembly>
</assemblyBinding>

对于Web Api A(使用3.3.2版本)

同样在Web.config的<runtime>节点下添加(如果已有类似配置,确保指向正确版本):

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Ninject.Web.Common" 
                      publicKeyToken="c7192dc5380945e7" 
                      culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.3.2.0" 
                    newVersion="3.3.2.0" />
  </dependentAssembly>
</assemblyBinding>

2. 确保引用的Copy Local属性设置为True

右键每个项目中的Ninject.Web.Common引用 → 选择属性,将Copy Local设置为True。这样每个项目都会把自己依赖的版本dll复制到各自的输出目录,不会依赖全局或其他项目的dll。

3. 配置独立的输出目录(关键!)

如果两个项目的输出目录相同(比如默认都输出到bin\Debug\),新版本的dll会覆盖旧版本,这是导致冲突的常见原因。你需要为每个项目设置独立的输出路径:

  • 右键Web Api A → 属性 → 生成 → 输出路径,改为类似bin\Debug\ApiA\的路径
  • 右键Web Api B → 属性 → 生成 → 输出路径,改为类似bin\Debug\ApiB\的路径

4. 清理并重建解决方案

最后执行以下步骤确保所有修改生效:

  • 右键解决方案 → 清理解决方案,删除所有旧的输出文件
  • 右键解决方案 → 生成解决方案,让每个项目重新生成并复制自己的依赖dll到独立目录

这样处理后,两个项目会各自加载对应版本的Ninject.Web.Common,不会再出现类型加载错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:32:38