.NET – 具有相同名称空间的多个库 – 引用
今天我面临一个奇怪的挑战……
这个挑战涉及两个我需要从我的应用程序引用的.NET库。 我无法控制其中的两个并且在其中具有相同的命名空间。
所以…
我有foo.dll
包含一个位于Blue.Red.Orange
命名空间的Widget
类。
我有bar.dll
,它还包含一个Widget
类,它也位于Blue.Red.Orange
命名空间中。
最后,我的应用程序需要引用foo.dll
和bar.dll
。 这需要在我的应用程序中我需要使用foo
的Widget
类以及bar
的Widget
类
所以,问题是如何管理这些引用,以便我可以确定我使用正确的Widget
类?
如上所述,我无法控制foo
或bar
库,它们就是这样,无法更改。 但是我可以完全控制我的应用程序。
您需要使用外部别名 – 在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:
- MyBarWrapper.dll(其中包含对bar.dll的引用)
- MyFooWrapper.dll(其中包含对foo.dll的引用)
并支持不同的命名空间。
如果你能做到这一点,我会感到惊讶,不使用reflection。
创建自己的FooWrapper和BarWrapper dll可能更容易,它们引用foo和bar并在不同的命名空间下再次公开它们的内容。