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

Can two classes with the same name be in the same namespace across two different assemblies?

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

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

的名称

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

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

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 中都有一个 "alias",默认情况下它是 global。这对于日常程序员来说通常是不可见的。您可以通过单击引用并更改属性中的别名来更改别名。然后,您可以通过在文件顶部添加 extern alias myalias 来引用它,而实际的 class 是这样引用的 myalias::MyApp.Testing

当 运行 2 个版本的 API 或类似版本时可能需要这样做,尽管我坚持尽可能避免这种情况。

有关详细信息,请参阅 this answer