配置特定的resw资源字符串变体



我一直在尝试在我的项目中设置resource.resw文件的特定于配置的变体,这样我就可以在Debug和Release(以及其他配置(中使用不同的资源字符串值。

VS中有标准的设施,根据所选的配置,有条件地将文件包括在生成中或从生成中排除。对于必须包含在配置中的文件,我已将文件属性设置为"内容"="是"one_answers"从生成中排除"="否",而对于另一个文件,则设置为相反。

变体在IDE中按预期显示-只有一个匹配的当前配置处于活动状态,另一个在Properties视图中显示Content=False,在文件列表中显示红色图标。vcxproj还包含具有DeploymentContent和ExcludedFromBuild集合的.resw文件的正确PRIResource节点:

<ItemGroup>
<PRIResource Include="DebugStrings.resw">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</ExcludedFromBuild>
<DeploymentContent...

然而,构建此项目失败,并显示消息

错误PRI277:0xdef00532-资源resw的值冲突名称/资源名称'

检查中间文件会发现两个.resw变体都列在resources.resfiles中,然后将其输入MakePri.exe。ExcludedFromBuild设置似乎被忽略。

我该如何让它发挥作用?是否有一种特殊的方法来控制resw文件的包含?也许是一种完全拥有字符串变体的不同方法?

显然有用于组织资源变体的"限定符",以及命名方案(https://learn.microsoft.com/en-us/windows/uwp/app-resources/tailor-resources-lang-scale-contrast)。甚至还有一个"配置"限定符,尽管还不完全清楚是哪种配置,以及在运行时我应该在哪里使用标识符来选择我想要的资源变体。

为了完整起见,将其添加为答案,因为这是相关的,甚至可能对某人有用。但是,我不喜欢将项目配置问题转移到运行时,将不需要的、可能敏感的值添加到包中。因此,我决定强制模拟ExcludedFromBuild,并通过自定义构建步骤将我需要的单个.resw变体挑选并复制到构建中。向那些应对微软这场尴尬的混乱负责的人大声疾呼。

最新更新