我正在迁移使用C++编写并具有C#包装程序的库。 C#包装器(LibWrapper)具有一组带有 namespace 的类,例如:

namespace MyNamespace
   class MyClass
   class MyOtherClass

我的新库LibraryCS包含与LibWrapper相同的 namespace 和类名(按用户要求),因此我也有:
namespace MyNamespace
   class MyClass
   class MyOtherClass

现在已经完成了迁移,我正在创建一个测试,该测试将比较使用两个库的结果以验证迁移。但是,当我尝试引用MyNamespace.MyClass时,出现了一个编译器错误(按预期!),该错误是“LibWrapper和LibraryCS中都定义了MyNamespace.MyClass”。

是否有解决此问题的技巧,使我可以使用两个名称完全相同但来自同一客户端代码中不同程序集的类?

另外,还有其他方法可以测试吗?

将迁移的 namespace 重命名为MyNamespace2这样的名称当然可以工作,但是我们被要求不要这样做,以使客户端代码更易于迁移。

最佳答案

您可以使用extern alias引用来自不同程序集的具有相同完全限定名称的类型。选择对LibraryCS的引用,并将属性页中的别名从“全局”更新为“LibraryCS”,然后在源文件的顶部添加extern alias LibraryCS;,然后可以使用LibraryCS::MyNamespace.MyClass引用LibraryCS中的类。您可以使用MyNamespace.MyClassglobal::MyNamespace.MyClass引用LibWrapper中的类,或者也可以为该引用使用别名。

关于c# - 在两个程序集中具有相同名称的类(故意),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3018419/

10-11 13:20