You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2017与VS2019编译后.resources文件命名规则不一致问题咨询

根因分析

这个差异是项目系统的资源生成规则不同导致的,和VS版本匹配的默认项目模板有关:

  • 旧版本(VS2017及更早)常用的非SDK风格.NET Framework csproj项目,.resx资源文件的生成默认遵循依赖项优先规则:会根据resx绑定的.cs文件内的类命名空间生成.resources文件名
  • 新版(VS2019及之后)默认创建的SDK风格(.NET Core/.NET 5+)csproj项目,资源生成默认遵循路径优先规则:会根据resx文件所在的文件夹相对路径+文件名生成.resources文件名,和类的实际命名空间无关

修复方案

方案1:全局修改项目规则(推荐)

直接修改项目的.csproj文件,在第一组<PropertyGroup>节点内添加如下配置:

<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>

开启这个配置后,SDK风格项目也会沿用老版本的规则,根据resx绑定的.cs文件内的类命名空间生成资源名,不需要修改业务代码。

方案2:单独指定目标资源的命名

如果不想全局修改规则,可以单独给这个视图对应的resx文件配置生成名:
在.csproj中找到这个.resx对应的<EmbeddedResource>节点,添加ManifestResourceName属性:

<EmbeddedResource Update="A/B/C/View.resx">
  <ManifestResourceName>A.B.View.resources</ManifestResourceName>
</EmbeddedResource>

也可以用项目变量避免硬编码:

<ManifestResourceName>$(RootNamespace).View.resources</ManifestResourceName>

方案3:调整资源加载逻辑匹配现有规则

如果不想修改项目配置,也可以调整ComponentResourceManager的调用逻辑,不需要硬编码完整文件名:
在创建资源管理器时直接传入视图类的类型,框架会自动匹配按路径生成的资源名:

ComponentResourceManager resources = new ComponentResourceManager(typeof(View));

内容的提问来源于stack exchange,提问作者ijk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:54:03