使用两个具有相同命名空间的.NET库

时间:2009-04-11 23:41:15

标签: c# .net vb.net dll

我目前正在为公司维护一些旧代码。正如它会发生的那样,我正在修改的当前应用程序使用旧版本的内部库(我们称之为Lib1.dll)。他们还有一个名为Lib2.dll的新版本库,它以多种方式改进了以前的库。

不幸的是,Lib2不能向后兼容Lib1。更糟糕的是,它们都使用相同的命名空间Product.Common。

如何在同一个项目中使用Lib2和Lib1?现在,如果我添加对它们的引用,VS告诉我某些类是不明确的(这是有道理的,因为它们使用相同的命名空间)。

基本上,我需要这样的东西:

Imports Lib1:Product.Common.Class

我正在使用VB.NET 1.1。

4 个答案:

答案 0 :(得分:6)

我发现一个博客条目在C#中有一个解决方案,不确定VB.NET中的解决方案。

Extern alias walkthroughC# 2.0: Using different versions of the same dll in one application


编辑:

看起来你运气不好。似乎没有.NET 1.1的解决方案。

答案 1 :(得分:5)

您可以添加另一个项目来“托管”您的一个Lib项目。基本上只需添加一个图层来将命名空间嵌套到更深层次,这样它就不会再引起冲突。

答案 2 :(得分:1)

如果Lib2.dll比Lib1.dll改进了,为什么还需要Lib1.dll?最好的办法是从项目中删除Lib1.dll,只使用Lib2.dll。

如果没有,请尝试此链接,看看是否有帮助

http://blogs.msdn.com/ansonh/archive/2006/09/27/774692.aspx

答案 3 :(得分:1)

我认为乔尔的回答可能是最简单的方法。但另一个更极端的选择是通过ildasm运行程序,在命名空间上执行搜索替换,并通过ilasm运行结果。

您可以使用此方法遇到其他问题,例如签名,但它允许您“重命名”程序集中的命名空间。