.NET – 具有相同名称空间的多个库 – 引用

今天我面临一个奇怪的挑战……

这个挑战涉及两个我需要从我的应用程序引用的.NET库。 我无法控制其中的两个并且在其中具有相同的命名空间。

所以…

我有foo.dll包含一个位于Blue.Red.Orange命名空间的Widget类。

我有bar.dll ,它还包含一个Widget类,它也位于Blue.Red.Orange命名空间中。

最后,我的应用程序需要引用foo.dllbar.dll 。 这需要在我的应用程序中我需要使用fooWidget类以及barWidget

所以,问题是如何管理这些引用,以便我可以确定我使用正确的Widget类?

如上所述,我无法控制foobar库,它们就是这样,无法更改。 但是我可以完全控制我的应用程序。

您需要使用外部别名 – 在C#2中引入。

Anson Horton 在他的博客上进行了一次演练 ,您可能会发现它非常有用。

我认为你必须使用extern alias

请参阅http://msdn.microsoft.com/en-us/library/ms173212.aspx

这是一个演练。 http://blogs.msdn.com/b/ansonh/archive/2006/09/27/774692.aspx

您可以使用“ 别名 ”属性来解决冲突。 选择库并打开“属性”窗口。 这个SOpost已经讨论过了

哇,那太棘手了。 我叮,我会创建两个包装DLL:

  1. MyBarWrapper.dll(其中包含对bar.dll的引用)
  2. MyFooWrapper.dll(其中包含对foo.dll的引用)

并支持不同的命名空间。

如果你能做到这一点,我会感到惊讶,不使用reflection。

创建自己的FooWrapper和BarWrapper dll可能更容易,它们引用foo和bar并在不同的命名空间下再次公开它们的内容。