假设您有项目A,并且它具有各种dll依赖项,但树看起来像这样:
Project A
=> Project B
=> Project C
=> Project D
=> Project C
=> Project E
=> Project C, v2
Run Code Online (Sandbox Code Playgroud)
有没有办法使用Project E,因为它依赖于较新版本的Project C(dll),即使项目的其余部分使用的是同一个库的旧版本?
如果没有办法,或者会导致咬牙切齿的方法,是否有一种前瞻性的解决方案来防止这种情况在未来的项目中发生?
我面临以下问题(或者一个挑战,如果有人喜欢这样称呼它):在我们的 C# 桌面应用程序中,我们有两个额外的数据处理库供应商(都是用 MATLAB 开发的,虽然版本不同)。每个库都依赖于 MathWorks 的 MWArray.dll,每个库都需要不同的版本。
我确定的(经过测试)是:
我已经尝试过的:
搜索 SO 类似的问题 - 他们要么解决一阶依赖歧义(而我的问题是二阶依赖歧义),要么处理(向后)兼容或开源的库的问题,因此那些不能解决我的问题问题:
使用程序集运行时绑定 - 我的 App.config 文件丰富了:
<runtime>
<assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentassembly>
<assemblyidentity name="MWArray" publickeytoken="e1d84a0da19db86f" />
<bindingredirect oldVersion="0.0.0.0-2.17.0.0" newVersion="2.17.0.0" />
<codebase version="2.17.0.0" href="C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MWArray\v4.0_2.17.0.0__e1d84a0da19db86f\MWArray.dll" />
<codebase version="2.18.0.0" href="C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MWArray\v4.0_2.18.0.0__e1d84a0da19db86f\MWArray.dll" />
</dependentassembly>
</assemblybinding>
</runtime> …Run Code Online (Sandbox Code Playgroud)