【问题标题】:Using two .NET libraries with the same namespace使用具有相同命名空间的两个 .NET 库
【发布时间】:2010-10-18 23:11:02
【问题描述】:

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

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

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

基本上,我需要类似的东西:

Imports Lib1:Product.Common.Class

我正在使用 VB.NET 1.1。

【问题讨论】:

  • 我在 C# 中遇到了同样的问题,如果有任何解决方法,我很感兴趣
  • @Andy:C#解决方案很简单,VB.NET不太清楚。
  • 虽然这不是一个解决方案......这两个库具有完全相同的命名空间。您可以使用命名空间来区分它们。唯一不同的是它们有不同的 DLL 名称。
  • @cdmckay:啊,我现在看到了。找到一个 C# 答案并将发布。
  • @cdmckay:你可能是 SOL。没有找到任何不使用外部别名的解决方案。

标签: c# .net vb.net dll


【解决方案1】:

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

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


编辑:

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

【讨论】:

  • 是的,它看起来适用于 .NET 2.0。我正在使用 .NET 1.1 :(
【解决方案2】:

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

【讨论】:

  • 如何通过 Host 项目公开 Lib 引用?
【解决方案3】:

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

如果没有,试试这个链接看看是否有帮助

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

【讨论】:

  • 是的,这听起来很棒,但这不是一个选择。正如我所提到的,它们不向后兼容,如果我取出 Lib1,用 Lib2 代码替换损坏的 Lib1 代码需要花费很多时间。
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多