C# 两个引用程序集之间的类型歧义

C# 两个引用程序集之间的类型歧义,c#,C#,我有以下问题,开始让我发疯。 我在Assembly1中有一个类sayClass1。我将Class1移动到Assembly2,并在Assembly2中废弃了Class1(保留了相同的名称空间,我现在无法删除它,以避免对我的用户进行破坏性的更改) 现在我有了一个单元测试程序集TestAssembly2,它引用了程序集Assembly1和Assembly2。现在我在单元测试中尝试使用Class1时遇到了编译问题Class1。这很有意义,因为我在Assembly1和Assembly2中都有两个Class

我有以下问题,开始让我发疯。 我在Assembly1中有一个类say
Class1
。我将
Class1
移动到Assembly2,并在Assembly2中废弃了
Class1
(保留了相同的名称空间,我现在无法删除它,以避免对我的用户进行破坏性的更改)

现在我有了一个单元测试程序集TestAssembly2,它引用了程序集Assembly1和Assembly2。现在我在单元测试中尝试使用
Class1
时遇到了编译问题
Class1
。这很有意义,因为我在Assembly1和Assembly2中都有两个
Class1

问题 有没有办法告诉编译器使用Assembly2中定义的
Class1
(因为Assembly1中的已过时)而不是Assembly1

编辑我不能使用类型转发,因为Assembly1不能引用Assembly2:(

您可以尝试该属性

[assembly:TypeForwardedTo(typeof(Class1))]
这样,您就可以将类型完全移动到另一个程序集而不中断任何操作。您甚至不需要重新生成引用程序集,因为运行时会为您处理转发操作。
有关更多信息,请参见此处:

编辑:如果无法从Assembly1引用Assembly2,则可以定义外部别名

可以通过在解决方案资源管理器中选择对程序集的引用并在属性窗口中编辑别名来定义它们


然后,您只需要使用
您的别名::Class1
来限定您的类型,您应该为程序集添加别名

在使用项目的“引用”节点下,选择Assembly2并设置不同的“别名”,例如“a2”

还要在代码中添加
外部别名a2

然后,当您需要引用此类型时,使用
a2::YourName.Class2
。这将消除歧义


谢谢你的回答,+1。我不能使用类型转发,因为Assembly1不能引用Assembly2:(@GETah Ok,那么还有一种可能性,即使用外部别名。更新了我的答案。酷,解决了我的问题:)你为什么不在你的程序中使用Assembly2.Class1呢code@Boomer这不起作用。程序集名称不能像命名空间那样使用(正如GETah所说,两个类都在同一个命名空间中)。这需要一个外部别名,如下答案所述。很抱歉,我混淆了命名空间,如果程序集中有命名空间,那会有帮助:)再次抱歉