使用同一库的两个不同版本

5
我正在开发一个小型的库,将在多个应用程序中使用。我希望在我的库中使用一些第三方库(例如log4Net,Entity Framework等)。我可以将DLL文件与我的库一起部署,或者使用ILMerge创建一个单独的DLL文件(我对ILMerge知之甚少,从未尝试过)。
我担心消费我的库的应用程序也使用我将要使用的同样的第三方库会发生什么。例如,如果我使用log4Net 1.2版本,而使用应用程序使用log4Net 1.0版本,我是否会遇到某种冲突,或者只会有一个版本的组件不能加载?
ILMerge能否防止这种情况?在开发具有第三方依赖项的库时,通常如何解决这个问题?

我之前遇到过这种情况 - 那是一个典型的由大公司创建的庞然大物,有大量的项目。曾经有人添加了一个需要更新版本log4Net的项目,结果导致一切都崩溃了。当时的解决方案(幸好我没有参与)是根据需要更改代码,以便所有项目都可以引用同一个更新的log4Net版本。除了“在GAC中安装并引用您特定的版本”之外,我很想看到这种问题的好解决方案。 - Gjeltema
Hans,你能解释一下你的评论吗?我不知道我的问题中暗示了系统不需要维护,或者项目会完全完成。 - Phil Sandler
1
@HansPassant 我也很困惑 - 你是打算回答另一个问题吗?这似乎与此问题不相符。 - Gjeltema
2个回答

3
您可以使用 extern alias

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

这里有一个Extern alias演练

2
这对我的团队几年前知道这个信息会非常有用。 - Gjeltema

0

最好的方法是与您的应用程序一起部署。NuGet非常好地管理这些依赖关系。除非您有某些特定原因要使用ILMerge,否则它只会让您的生活更加困难 - 也许您想升级,例如。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接