如果同一名称空间中的两个类包含在C#中的两个不同库中,该怎么办

时间:2011-05-31 05:18:19

标签: c# .net class-library

我有一个使用库的程序(包含遗留代码的主应用程序)。遗憾的是,主应用程序和库都使用名为Softwares.SoftwareXSD的类(具有相同名称和相同属性)。当我使用Softwares.SoftwareXSD中定义的类时,主程序抱怨模棱两可。但是,Visual Studio表示,通过在类名下显示绿色下划线,可以在复制品中进行选择。我相信这不是一个好方法。

这有什么问题吗?这种情况的最佳解决方法是什么?

问题是XSD中的某些类特定于主应用程序,而某些类特定于库,但这些类使用引用相互链接。

3 个答案:

答案 0 :(得分:9)

如果我理解你的问题,你在不同的程序集(主应用程序和库)中有两个类Softwares.SoftwareXSD,其完全限定的名称是相同的。

要解决此问题,请转到Visual Studio中的解决方案资源管理器,展开“参考”,右键单击对库的引用,然后选择属性。

在“别名”中,用其他别名替换“global”,例如“文库”。

您现在可以按如下方式消除参考的歧义:

global::Softwares.SoftwareXSD // is in the main application
library::Softwares.SoftwareXSD // is in the library

尽管如此,我仍然建议您为班级选择唯一的名称。

答案 1 :(得分:3)

您可以使用库名称空间的别名来消除成员的歧义:

using XSD = Softwares.SoftwareXSD;

然后:

XSD.SomeClass.SomeLibraryCall();

答案 2 :(得分:1)

如果编译器抱怨“明确的引用”,因为你有两个具有相同类名的命名空间,并且你碰巧有两个命名空间的使用语句(在你的情况下)你可以逃脱 global关键字。

ex:using LegacySoftwareXSD = global::LegacySoftwares.Softwares.SoftwareXSD;