在两个不同的程序集中,两个具有相同名称的类可以位于相同的名称空间吗?

时间:2018-08-07 14:57:17

标签: c# namespaces .net-assembly

我有两个不同的程序集:Assembly1Assembly2。两个程序集使用相同的名称空间SoftwareDrivers。现在,我有一个类的两个实现,它们具有相同的功能,只是不同的实现和依赖性将一个实现与Assembly1绑定,另一个实现与Assembly2绑定;我将此类称为PackageWriter

某些项目可能并且可能需要引用两个程序集,因此我预计在该情况下解决使用哪个PackageWriter会有问题。是这样吗如果是这样,那么是在不更改项目结构的情况下更改PackageWriter名称的唯一方法是解决此问题?c

2 个答案:

答案 0 :(得分:1)

是的,他们可以。如果两个程序集都被引用,您将收到类似于以下的错误:

error CS0433: The type 'Testing' exists in both 'MyApp.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' and 'MyApp.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'

请注意,您切勿有目的地陷入这种情况。但是,如果您出于某种原因而陷入困境,则必须处理以下情况:

每个程序集在.NET中都有一个“别名”,默认情况下为global。对于程序员来说,这通常是不可见的。您可以通过单击引用并在“属性”中更改别名来更改别名。然后,您可以通过在文件顶部放置extern alias myalias来引用它,并像这样myalias::MyApp.Testing

引用实际的类

在运行2个版本的API或类似版本时,可能需要这样做,尽管我尽一切可能避免这样做。

有关更多详细信息,请参见this answer

答案 1 :(得分:0)

如果它在同一个命名空间中,则否,除非您将其声明为partial