带“-”字符的 C# 项目文件夹命名空间

Sjo*_*888 5 c# namespaces

我意识到包含“-”字符的文件夹(作为命名空间提供者)确实获得了与预期不同的命名空间。

例如,我观察到嵌入资源:

AssemblyName/lib/font/source-sans-pro/source-sans-pro.css
Run Code Online (Sandbox Code Playgroud)

最后将有以下命名空间:

AssemblyName.lib.font.source_sans_pro.source-sans-pro.css
Run Code Online (Sandbox Code Playgroud)

因此,对于文件夹,而不是文件(为什么?),命名空间发生变化,使得“-”被替换为“_”下划线字符。

不幸的是我找不到任何描述这种行为的官方参考资料。任何人都可以提供一些有关此行为的参考吗?为什么文件夹命名空间会改变?为什么不是文件的名称空间?

Jon*_*eet 6

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

允许的标识符的完整描述位于 C# 5 规范的第 2.4.2 节中。当然,您的嵌入式资源最终与 CLI 规范比与 C# 规范更相关,但它具有类似的规则 - 定义(在 ECMA-335 中)以遵循Unicode 3.0 标准技术报告 15 的附件 7 的规则。

  • 可能值得注意的是资源和命名空间如何协同工作,因为他的部分问题还在于为什么更改仅应用于文件夹(命名空间)而不应用于文件名,文件名保留了连字符。 (3认同)
  • 我也不是,这就是为什么我不写答案:) (2认同)