C# .NET-具有相同命名空间的多个库-引用
今天我面临一个奇怪的挑战 这个挑战涉及两个.NET库,我需要从我的应用程序中引用它们。这两个名称空间我都无法控制,并且在它们内部具有相同的名称空间 所以 我有C# .NET-具有相同命名空间的多个库-引用,c#,namespaces,C#,Namespaces,今天我面临一个奇怪的挑战 这个挑战涉及两个.NET库,我需要从我的应用程序中引用它们。这两个名称空间我都无法控制,并且在它们内部具有相同的名称空间 所以 我有foo.dll,它包含一个小部件类,该类位于Blue.Red.Orange命名空间上 我有一个bar.dll,它还包含一个Widget类,该类也位于Blue.Red.Orange命名空间上 最后,我的应用程序需要同时引用foo.dll和bar.dll。这是必需的,因为在我的应用程序中,我需要使用foo中的Widget类以及bar中的Widg
foo.dll
,它包含一个小部件
类,该类位于Blue.Red.Orange
命名空间上
我有一个bar.dll
,它还包含一个Widget
类,该类也位于Blue.Red.Orange
命名空间上
最后,我的应用程序需要同时引用foo.dll
和bar.dll
。这是必需的,因为在我的应用程序中,我需要使用foo
中的Widget
类以及bar中的Widget
类
所以,问题是我如何管理这些引用,以便确定我使用的是正确的小部件类
如前所述,我对foo
或bar
库没有控制权,它们是真实的,不能更改。但是,我可以完全控制我的应用程序。您需要使用C#2中引入的-
Anson Horton有一个你可能会觉得有用的方法。如果你能做到这一点,而不使用反射,我会感到惊讶
创建自己的FooWrapper和BarWrapper DLL可能更容易,它们引用foo和bar,并在不同的名称空间下再次公开它们的内容。哇,这很棘手。我会创建两个包装DLL:
MyBarWrapper.dll(它引用了bar.dll)
MyFooWrapper.dll(它引用了foo.dll)
并且支持不同的名称空间。我认为您必须使用extern alias
看
这是一个演练 您可以使用“别名”属性来解决冲突。选择库并打开属性窗口。这已经在这篇文章中讨论过了觉得自己很惊讶:)对不起。我不认识外人的别名。我认为这是一种更好的方法。可能值得注意的是,每个程序集都有默认的外部别名global
,别名似乎是同一程序集的不同版本的一个选项,而不是用于不同的程序集目的,这只是一种错误的体系结构。@Augusto:它适用于同一程序集的不同版本,或用于包含相同命名空间限定类型名称的不同程序集。这不仅仅是为了一种或另一种情况。你是说我的解决方案行不通吗?如果是这样的话,你有什么可以支持这一说法吗?@Jon Skeet:你的解决方案不是问题,但它是解决架构问题的一个聪明的“黑客”。他不应该在不同程序集中的相同名称空间中有两个同名的不同类。对于同一概念的两个不同实现,他应该使用一个接口。由于他无法控制它,我认为您的解决方案是好的。@Augusto:不要忘记这些库可能是第三方库,没有任何第三方做错任何事情(尽管这里的常见情况可能是不适当地使用“全局”名称空间)。