C# 具有相同名称的两个类是否可以跨两个不同的程序集位于同一命名空间中?

C# 具有相同名称的两个类是否可以跨两个不同的程序集位于同一命名空间中?,c#,namespaces,.net-assembly,C#,Namespaces,.net Assembly,我有两个不同的程序集:Assembly1和Assembly2。两个程序集使用相同的命名空间SoftwareDrivers。现在,我有一个类的两个实现,它们具有相同的功能,只是不同的实现和依赖关系将一个实现绑定到Assembly1,另一个绑定到Assembly2;我将调用这个类PackageWriter 有些项目可能需要引用这两个程序集,因此我预计在解决该场景中使用哪个PackageWriter时会出现问题。是这样吗?如果是的话,这是解决这个问题的唯一办法,不改变项目结构,要更改PackageWr

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


有些项目可能需要引用这两个程序集,因此我预计在解决该场景中使用哪个
PackageWriter
时会出现问题。是这样吗?如果是的话,这是解决这个问题的唯一办法,不改变项目结构,要更改
PackageWriter
?c

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

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

,否则为否。如果两个程序集都被引用,您将收到类似于以下内容的错误:

错误CS0433:类型“测试”同时存在于“MyApp.Domain,版本=1.0.0.0,区域性=中立,PublicKeyToken=null”和“MyApp.Infrastructure,版本=1.0.0.0,区域性=中立,PublicKeyToken=null”中。

注意,你不应该故意把自己置于这种情况。但是,如果出于某种原因,您发现自己处于必须处理此问题的情况下:

每个程序集在.NET中都有一个“别名”,默认情况下,它是
全局的
。这通常是日常程序员看不见的。您可以通过单击引用并在“属性”中更改别名来更改别名。然后,您可以通过在文件顶部放置
extern alias myalias
来引用它,实际类的引用方式如下
myalias::MyApp.Testing

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


有关更多详细信息,请参阅。

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

错误CS0433:类型“测试”同时存在于“MyApp.Domain,版本=1.0.0.0,区域性=中立,PublicKeyToken=null”和“MyApp.Infrastructure,版本=1.0.0.0,区域性=中立,PublicKeyToken=null”中。

注意,你不应该故意把自己置于这种情况。但是,如果出于某种原因,您发现自己处于必须处理此问题的情况下:

每个程序集在.NET中都有一个“别名”,默认情况下,它是
全局的
。这通常是日常程序员看不见的。您可以通过单击引用并在“属性”中更改别名来更改别名。然后,您可以通过在文件顶部放置
extern alias myalias
来引用它,实际类的引用方式如下
myalias::MyApp.Testing

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


有关更多详细信息,请参阅。

为什么不干脆试用一下呢?如果两个类有相同的名称(甚至是相同的名称空间),但做的事情不同,它会有什么味道呢。。有一些功能可以帮助您处理这些问题,但通常这表明您没有选择足够好的名称。也就是说,使用assembly1的
PackageWriter
与使用assembly2的
PackageWriter有什么区别,为什么名称中没有这一部分?如果它们“功能相同,但实现不同”,那么为什么不选择一个实现更好的,并在两个地方都使用它呢?@RufusL-如果一个实际上应该被命名为
XmlPackageWriter
,另一个
ASN1PackageWriter
,那么两者都不一定比另一个好,但正如我上面所说,这表明命名失败。@Damien_不信者我想我不明白为什么在同一个名称空间中有两个不同的方法具有相同的功能。也许它应该用类似的功能来表达?为什么不干脆试试呢?如果两个类有相同的名称(甚至是相同的名称空间),但做的事情不同,它会有什么味道呢。。有一些功能可以帮助您处理这些问题,但通常这表明您没有选择足够好的名称。也就是说,使用assembly1的
PackageWriter
与使用assembly2的
PackageWriter有什么区别,为什么名称中没有这一部分?如果它们“功能相同,但实现不同”,那么为什么不选择一个实现更好的,并在两个地方都使用它呢?@RufusL-如果一个实际上应该被命名为
XmlPackageWriter
,另一个
ASN1PackageWriter
,那么两者都不一定比另一个好,但正如我上面所说,这表明命名失败。@Damien_不信者我想我不明白为什么在同一个名称空间中有两个不同的方法具有相同的功能。也许应该用类似的功能来表达?partial只能在单个程序集中工作。这是一个编译时功能。partial只能在单个程序集中工作。这是一个编译时特性。