今天我面临一个奇怪的挑战......
这个挑战涉及两个我需要从我的应用程序引用的.NET库。我无法控制其中的两个并且在其中具有相同的命名空间。
因此...
我的foo.dll
包含位于Widget
命名空间的Blue.Red.Orange
类。
我的bar.dll
也包含Widget
类,该类也位于Blue.Red.Orange
命名空间。
最后,我的应用程序需要引用foo.dll
和bar.dll
。这需要在我的应用程序中,我需要使用Widget
中的foo
类以及Widget
中的bar
类
所以,问题是如何管理这些引用,以便我可以确定我使用的是正确的Widget
类?
如上所述,我无法控制foo
或bar
库,它们就是它们,无法更改。但我确实可以完全控制我的申请。
答案 0 :(得分:42)
您需要使用C {2中引入的extern alias。
Anson Horton有walkthrough on his blog你可能会觉得有用。
答案 1 :(得分:8)
我认为你必须使用extern alias
请参阅http://msdn.microsoft.com/en-us/library/ms173212.aspx
这是一个演练。 http://blogs.msdn.com/b/ansonh/archive/2006/09/27/774692.aspx
答案 2 :(得分:1)
您可以使用“别名”属性来解决冲突。选择库并打开“属性”窗口。这已在此SO post
中讨论过答案 3 :(得分:0)
并在那里支持不同的命名空间。
答案 4 :(得分:-1)
如果你能做到这一点,我会感到惊讶,而不使用反射。
创建自己的FooWrapper和BarWrapper dll可能更容易,它们引用foo和bar并在不同的命名空间下再次公开它们的内容。