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

4
我目前正在为一家公司维护一些旧代码。恰巧,我正在修改的当前应用程序使用较旧版本的内部库(我们将其称为Lib1.dll)。他们还有一个名为Lib2.dll的新版本库,它在许多方面都改进了以前的库。
不幸的是,Lib2与Lib1不向后兼容。更糟糕的是,它们都使用相同的命名空间Product.Common。
如何在同一项目中使用Lib2和Lib1?现在,如果我添加对它们的引用,VS会告诉我某些类是模糊的(这是有道理的,因为它们使用相同的命名空间)。
基本上,我需要像这样的东西:
Imports Lib1:Product.Common.Class

我正在使用VB.NET 1.1。


我在C#中遇到了同样的问题,我很有兴趣知道是否有任何解决方法。 - Andy White
@Andy:C#的解决方案很容易,不确定VB.NET。 - Samuel
这不是一个解决方案...这两个库有完全相同的命名空间。您可以使用命名空间来区分它们。唯一不同的是它们具有不同的DLL名称。 - cdmckay
@cdmckay:啊,我现在明白了。找到了一个C#的答案,我会发帖的。 - Samuel
@Samuel 谢谢你提供的链接,我之前不知道 extern alias 这个东西! - Andy White
显示剩余2条评论
4个回答

6

是的,看起来它将与.NET 2.0一起使用。我正在使用.NET 1.1 :( - cdmckay

5

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


如何通过宿主项目公开Lib引用? - cdmckay

1

听起来很棒,但这不是一个选项。正如我所提到的,它们不向后兼容,如果我去掉Lib1,就需要花费很多时间用Lib2代码替换损坏的Lib1代码。 - cdmckay

1

我认为Joel的答案可能是最简单的方法。但另一个更极端的选项是通过ildasm运行程序,在命名空间上进行搜索替换,然后将结果通过ilasm运行。

您可能会遇到其他问题,例如签名,但这将允许您在程序集中“重命名”命名空间。


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