.NET Framework项目同csproj解决Bond.Core.CSharp多版本依赖冲突
.NET Framework 4.7.2 项目NuGet传递依赖版本冲突解决方法
这个冲突是NuGet依赖解析与.NET Framework运行时版本校验机制共同导致的,Bond.Core.CSharp 9.0.3为同主版本下的补丁更新,完全向后兼容9.0.1,按以下步骤配置即可让两个包正常运行:
1. 强制NuGet解析到统一版本的依赖
不要依赖NuGet自动解析传递依赖版本,直接在项目中显式添加对Bond.Core.CSharp 9.0.3的直接包引用,NuGet会优先使用项目直接引用的版本,覆盖所有传递依赖的版本要求。
在.csproj文件中添加如下配置:<ItemGroup> <!-- 保留原有两个包的引用 --> <PackageReference Include="Package1" Version="你实际使用的Package1版本号" /> <PackageReference Include="Package2" Version="你实际使用的Package2版本号" /> <!-- 显式指定冲突依赖的统一版本 --> <PackageReference Include="Bond.Core.CSharp" Version="9.0.3" /> </ItemGroup>2. 配置程序集绑定重定向
.NET Framework运行时默认会严格匹配程序集编译时引用的版本号,仅靠NuGet解析到高版本dll仍会在运行时抛出找不到9.0.1版本程序集的异常,必须配置绑定重定向将所有低版本引用映射到9.0.3。
最快的配置方式是打开Visual Studio的包管理器控制台,执行以下命令自动生成全量合法的绑定重定向:
执行完成后打开项目的Get-Project -Name 你的项目名称 | Add-BindingRedirectapp.config或web.config,确认<runtime>节点下生成了Bond.Core.CSharp对应的重定向规则,示例如下:
手动配置时注意替换<dependentAssembly> <assemblyIdentity name="Bond.Core.CSharp" publicKeyToken="991b3d7825d367d1" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-9.0.3" newVersion="9.0.3" /> </dependentAssembly>publicKeyToken为你本地引用的Bond.Core.CSharp程序集对应的实际公钥标记,可直接在VS对象浏览器中找到对应dll查看属性获取。3. 清理验证
- 关闭VS,删除项目目录下的
bin、obj文件夹,清除旧版本dll缓存 - 重新打开项目执行NuGet还原,重新生成项目
- 检查输出目录下的
Bond.Core.CSharp.dll属性,确认版本为9.0.3,运行项目测试两个包的相关功能即可
- 关闭VS,删除项目目录下的
异常兼容
如果NuGet还原时提示NU1608(依赖版本与包声明要求不匹配)警告,可在.csproj的第一个<PropertyGroup>节点下添加如下配置忽略该警告,版本兼容前提下该警告无实际影响:<NoWarn>$(NoWarn);NU1608</NoWarn>
内容的提问来源于stack exchange,提问作者Saif Haider
相关产品推荐
相关产品推荐

