Конфигурационная спецификация c resw вариантов строки ресурса - PullRequest
1 голос
/ 13 марта 2020

Попытка настроить параметры конфигурации c файлов ресурсов .resw в моем проекте, чтобы у меня могли быть разные значения строки ресурса в Debug и в Release (и в других конфигурациях).

В VS есть стандартные средства для условного включения или исключения файлов из сборки в зависимости от выбранной Конфигурации. Для файла, который должен быть включен в конфигурацию, заданы свойства файла: «Содержимое = Да» и «Исключено из сборки» = «Нет», а для другого файла - наоборот.

Варианты отображаются так, как ожидается в IDE - активна только одна соответствующая текущая конфигурация, а другая отображается с Content = False в представлении Properties и с красным значком в списке файлов. Vcxproj также содержит правильные узлы PRIResource для файлов .resw с установленными DeploymentContent и ExcludedFromBuild:

<ItemGroup>
    <PRIResource Include="Debug\Strings.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 name / имя ресурса'

Изучение промежуточных файлов показывает, что оба варианта .resw перечислены в resources.resfiles, которые затем передаются в MakePri.exe. Параметр ExcludedFromBuild, похоже, игнорируется.

Как мне заставить это работать? Есть ли особый способ контролировать включение файлов resw? Может быть, другой подход к наличию строковых вариантов вообще?

1 Ответ

0 голосов
/ 17 марта 2020

По-видимому, существуют "квалификаторы" для организации вариантов ресурсов и схема именования (https://docs.microsoft.com/en-us/windows/uwp/app-resources/tailor-resources-lang-scale-contrast). Существует даже квалификатор «Конфигурация», хотя не совсем понятно, какая это конфигурация, и где во время выполнения я должен взять идентификатор, чтобы выбрать нужный мне вариант ресурса.

Добавление этого как ответьте ради полноты, так как это актуально и может даже кому-то пригодиться. Но меня не устраивают проблемы конфигурации проекта, которые переносятся во время выполнения, когда в пакет добавляются ненужные и, возможно, конфиденциальные значения. Поэтому я решил принудительно эмулировать ExcludedFromBuild и собираю и копирую единственный вариант .resw, который мне нужен, для сборки через Custom Build Step. Привет всем, кто несет ответственность за этот неловкий беспорядок в Microsoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...