如何隔离第三方.NET库的可传递程序集依赖性?

时间:2019-10-01 19:11:51

标签: c# .net .net-assembly assemblybinding

设置

对于我们的应用程序和实用程序,我们尝试将所有工具上的所有 our (开源)库依赖关系标准化为相同版本;我们会不断构建所有工具以确保一切正常。

问题

碰巧,我们必须使用封闭源代码的第三方.NET库程序集。其中一些程序集对开源组件有自己的传递依赖。如果我们碰巧使用相同的开源组件,则我们可能会使用与封闭源代码依赖项不同的版本,因此会发生冲突。

问题示例

只是一个例子!

我们的程序集our_abc.dll使用封闭源代码的第三方程序集their_xyz.dll,该第三方程序集引用的Newtonsoft.Json.dll与我们使用的版本不同。

在这种情况下,我们的abc和their_xyz之间的“ API表面”上不使用json类型,这似乎经常发生。

解决方案?

因此,我们要实现的是,我们的代码仅使用所需版本的开源程序集,而我们引用的封闭源3rd第三方程序集应仅使用其版本。

理想情况下,应该使用尽可能少的配置文件欺骗来实现。对于许多部署而言,使用GAC似乎很笨拙。

我已经阅读过assemblyBinding,但是我不确定它是否适合该工作,因为看来我们需要在应用中手动维护所有传递依赖项所有应用程序的.config文件可使其正常工作:

link中的解决方案使其看起来像以下内容。在这种依赖情况下:

tool.exe -> my_abc.dll -> their_xyz.dll -> opensource.dll[v6] 
         \     ||
          \    \/ 
           \-> opensource.dll[v11]

...我知道我可以为app.config 准备一个tool.exe文件,该文件指定在哪里查找2(n)个不同版本的传递依赖。

但是,从可维护性的角度来看,最好将信息与their_xyz“程序包”捆绑在一起,这样tool.exe不必知道它的传递依赖项。这是somehow possible吗?

0 个答案:

没有答案