C#与VB项目清单资源结构差异原因及扁平化命名配置问询
问题解答
1. 命名差异的官方定义与说明
这类差异属于C#与VB.NET编译器嵌入式资源默认命名规则的设计差异,官方未给该差异单独设置专属名称,相关规则分别在两门语言的编译器行为文档中明确:
- VB.NET对嵌入式资源的默认命名规则为
[项目根命名空间].[文件名].[扩展名],会自动忽略资源文件所在的文件夹层级,生成扁平化的资源清单名称。 - C#对嵌入式资源的默认命名规则为
[项目默认命名空间].[资源文件相对路径按点分隔].[文件名].[扩展名],会完整保留项目内的文件夹层级结构生成资源名。
2. 沿用VB扁平化命名的实现方案
不需要修改原有业务代码,有两种配置方式可以实现需求:
方式1:单资源单独指定
右键点击目标资源文件,选择「属性」,在属性面板的LogicalName字段中直接填写你需要的原有资源名(比如App.IssueNotification.html),编译器生成资源清单时会优先使用该字段定义的名称,自动忽略文件夹层级。
方式2:全局批量配置
编辑你的.csproj项目文件,添加通配规则统一设置某一类资源的命名格式,示例配置如下:
<ItemGroup> <!-- 匹配Resources文件夹下所有html格式的嵌入式资源,统一生成扁平化命名 --> <EmbeddedResource Include="Resources\**\*.html"> <LogicalName>App.%(Filename)%(Extension)</LogicalName> </EmbeddedResource> </ItemGroup>
你可以根据实际的文件类型、根命名规则调整Include的通配符和LogicalName的拼接规则,适配原有代码的读取逻辑。
内容的提问来源于stack exchange,提问作者A. Niese
相关产品推荐
相关产品推荐

