C# 带有'-';性格

C# 带有'-';性格,c#,namespaces,C#,Namespaces,我意识到,包含“-”字符的文件夹是命名空间提供程序,它得到的命名空间与预期的不同 e、 g.我观察到嵌入式资源: AssemblyName/lib/font/source-sans-pro/source-sans-pro.css 将在末尾具有以下命名空间: AssemblyName.lib.font.source_sans_pro.source-sans-pro.css 因此,对于文件夹,而不是文件(为什么?),名称空间会发生更改,以“-”替换为“93;”下划线字符 不幸的是,我找不到任何描

我意识到,包含“-”字符的文件夹是命名空间提供程序,它得到的命名空间与预期的不同

e、 g.我观察到嵌入式资源:

AssemblyName/lib/font/source-sans-pro/source-sans-pro.css
将在末尾具有以下命名空间:

AssemblyName.lib.font.source_sans_pro.source-sans-pro.css
因此,对于文件夹,而不是文件(为什么?),名称空间会发生更改,以“-”替换为“93;”下划线字符


不幸的是,我找不到任何描述这种行为的官方参考资料。有人能提供一些关于这种行为的参考资料吗?为什么文件夹名称空间会更改?为什么文件的名称空间不允许呢?

标识符中不允许使用连字符,名称空间是标识符。原因很简单,如果你仔细想想-
x-y
是一个二进制
-
运算符,操作数为
x
y
。试图使它成为一个有效的标识符将是非常糟糕的


C#5规范第2.4.2节中对允许标识符的完整描述。当然,与C#spec相比,您的嵌入式资源最终与CLI spec的关系更密切,但它有类似的规则(在ECMA-335中)定义,以遵循的规则。

值得注意的是,资源和名称空间是如何协同工作的,因为他的部分问题也是为什么更改只应用于文件夹(名称空间)而不是文件名,它保留了连字符。@LasseV.Karlsen:老实说,我在这方面不是什么权威,我只是在猜测。尽管如此,请随意编辑:)我也不是,这就是为什么我不写答案:)