2个引用定义了相同的对象/命名空间

时间:2016-07-24 09:26:00

标签: c#

我目前正在制作一个程序,它使用多个.dll作为参考。这一切都运行正常,但昨天我添加了一个新的引用,我得到一个错误我正在使用另一个引用的对象,它说这个对象在两个.dll文件中定义。我尝试删除其他引用,但我需要该引用中的内容,所以我必须以某种方式解决它。我在网上搜索但我没有找到一个好的解决方案,因为似乎没有多少人遇到这个问题!因此,比以往任何时候都需要经验丰富的程序员的帮助,但我当然感谢每一个帮助:)

1 个答案:

答案 0 :(得分:1)

在2个不同的程序集中,在同一名称空间中定义相同的类是非常糟糕的做法。你已经找到了原因。这就是说,有一种机制允许消除称为外部别名的引用。

假设您有一个控制台应用程序,该应用程序引用包含相同类Foo.SomeClassClassLibrary1ClassLibrary2)的2个程序集。在要使用该类的项目中,选择程序集引用,并在“属性”窗口中定义别名(除了默认的global别名):

Redux

对第二个程序集引用执行相同操作并使用其他别名。

现在您可以使用您提供给引用的程序集别名来指定您引用的类:

extern alias assembly1;
extern alias assembly2;

using FirstClass = assembly1::Foo.SomeClass;
using SecondClass = assembly2::Foo.SomeClass;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var c1 = new FirstClass();
            var c2 = new SecondClass();
        }
    }
}