【问题标题】:Using Two Different Versions of the Same Library使用同一库的两个不同版本
【发布时间】:2013-06-07 22:01:53
【问题描述】:

我正在开发一个将在多个应用程序中使用的小型库。我想在我自己的库中使用一些第三方库(例如 log4Net、Entity Framework 等)。我想我可以将 DLL 与我自己的库一起部署,或者使用 ILMerge 创建单个 DLL(我对 ILMerge 知之甚少,从未尝试过)。

我担心如果使用我的库的应用程序也使用我将使用的相同第三方库会发生什么。例如,如果我使用 log4Net 1.2 版,而消费应用程序使用 log4Net 1.0 版,我会遇到某种冲突,还是只会加载一个版本的程序集?

ILMerge 会阻止这种情况吗?在开发具有第三方依赖项的库时,通常如何解决此问题?

【问题讨论】:

  • 我以前也遇到过这种情况——这是一个典型的大公司用大量项目创造的怪物。有一次,有人添加了一个项目,它需要一个更新版本的 log4Net,它破坏了一切。当时的解决方案(幸好我没有参与)是根据需要更改代码,以便能够让所有项目都引用相同的较新版本的 log4Net。除了“将其安装在 GAC 中并参考您的特定版本”之外,我希望看到针对此类问题的良好解决方案。
  • 汉斯,你能澄清一下你的评论吗?我不知道我的问题在哪里暗示系统不需要维护,或者项目已经完成。
  • @HansPassant 我也很困惑——你是否打算写下对另一个问题的回复?这个问题似乎不合适。

标签: c# .net ilmerge


【解决方案1】:

您可以使用extern alias:

您可能必须引用两个版本的程序集,它们具有 相同的完全限定类型名称。例如,您可能必须使用 同一应用程序中的两个或多个版本的程序集。通过使用 外部程序集别名,每个程序集的命名空间可以是 包装在由别名命名的根级命名空间中,这使得 它们要在同一个文件中使用。

这是Extern alias walkthrough。

【讨论】:

  • 这对我的小组几年前的了解非常有用。
【解决方案2】:

最好的方法是与您的应用一起部署。 NuGet 很好地管理了这些依赖项。除非您有特定的理由使用 ILMerge,否则它只会让您的生活更加艰难——例如,您可能想要升级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    相关资源
    最近更新 更多