C#是否可以显式解决具有相同全名的2种类型之间的冲突?

时间:2014-09-17 21:49:04

标签: c# namespaces

我有一个引用2个程序集A和B的项目。

A和B都声明具有相同全名的公共类型(例如Foo.Bar)。

当我构建时,似乎编译器选择一种类型来引用,然后抛出警告。有什么方法可以明确我想要使用哪种实现(例如,汇编A中的Foo.Bar)?

3 个答案:

答案 0 :(得分:4)

您必须使用extern alias。您必须使用/ r开关为每个dll编译代码。

csc /r:AssemblyA=A.dll /r:AssemblyB=B.dll [myProject]

或者您可以通过在项目的References文件夹中选择它来设置程序集的别名,并使用Aliases设置其properties window属性。

然后在.cs文件中使用extern alias明确选择您要使用的类型:

extern alias AssemblyA;
extern alias AssemblyB;

public class Test
{
   public void TestMethod()
   {
      var aFooBar = new AssemblyA.Foo.Bar();
      var bFooBar = new AssemblyB.Foo.Bar(); 
   }
}

更多信息here

答案 1 :(得分:-1)

您可以参考包括装配的完整方法名称,

像A.Foo.Bar或B.Foo.Bar

希望这能帮到你......

答案 2 :(得分:-2)

你是否已经像这样引用了FooBar类:A.FooBar或B.FooBar?

因为如果你想同时使用两个程序集,你可以明确指定你想用哪个程序集来调用FooBar,就像我提到的那样。

如果您也不想使用全名,万一它太长,您可以在使用声明中创建别名

How to use alias