1

环境

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

问题

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

问题示例

只是一个例子!

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

在这种情况下,在 our_abc 和 their_xyz 之间的“API 表面”上不使用 json 类型,这种情况似乎很常见。

解决方案?

所以,我们想要实现的是我们的代码只使用它需要的版本的开源程序集,而我们引用的封闭源第 3 方程序集应该只使用他们的版本。

理想情况下,这应该通过尽可能少的配置文件恶作剧来实现。对于相当多的部署,使用 GAC 似乎相当笨拙。

我已经阅读过assemblyBinding,但我不确定它是否适合这项工作,因为似乎我们需要手动维护所有应用程序的 app.config 文件中的所有传递依赖项才能正常工作:

链接中的解决方案使其看起来如下所示。鉴于这种依赖情况:

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

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

但是,从可维护性 POV 来看,如果我可以将信息与their_xyz“包”捆绑在一起会更好,这样tool.exe就不必知道它的传递依赖关系。这有可能吗?

4

0 回答 0