C#如何引用不同版本的依赖关系

Mik*_*ike 5 c# dependency-management

我面临以下问题(或者一个挑战,如果有人喜欢这样称呼它):在我们的 C# 桌面应用程序中,我们有两个额外的数据处理库供应商(都是用 MATLAB 开发的,虽然版本不同)。每个库都依赖于 MathWorks 的 MWArray.dll,每个库都需要不同的版本。

让我向您展示一下情况的草图: 在此处输入图片说明

我确定的(经过测试)是:

  • 两个库都可以单独调用,没有任何问题
  • 两个版本的MRC(Matlab Runtime Compiler)可以共存,不会造成干扰问题(见上)
  • 针对旧版本 MWArray.dll 编译的库不能与较新版本一起使用

我已经尝试过的:

    <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)
  • 我已将两个版本的 MWArray.dll 放在“资源”路径中(一个名为MWArray.2.17.0.0.dll,另一个名为MWArray.2.18.0.0.dll),将两者都添加为引用,并相应地编辑App.config。现在 Library1 崩溃,抱怨它无法初始化 MWArray。这是合乎逻辑的,因为它找不到MWArray.dll,因为只有一些MWArray.xxxxdll可用。


我将感谢有关处理此问题的任何提示或技巧,当然,一个有效的解决方案将是最好的。

同样 - 需要到达 MWArray 的不是我的代码,而是我引用的供应商代码

Fka*_*Fka 0

您是否尝试过依赖重定向?这是来自的一段代码Web|App.config

<dependentAssembly>
    <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.3.1" newVersion="4.0.3.1" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)