Там, где я работаю, у нас есть программа, которую использует наша компания. Затем у нас есть еще одна сборка той же программы, которая использует другие данные и разные фоны, текст заголовка и т. Д. Все это работает нормально, но поскольку оба технически являются одним и тем же приложением, значок приложения одинаков для обоих. Нам нужны отдельные значки для каждой сборки.

Значок приложения установлен в файле проекта: <ApplicationIcon>MyIcon.ico</ApplicationIcon>

Есть ли способ иметь другой значок в зависимости от конфигурации сборки? Я знаю, что атрибут Condition недопустим для тега <ApplicationIcon>.

2
Mike Webb 8 Янв 2014 в 22:13

2 ответа

Лучший ответ

Я знаю, что атрибут Condition недействителен для тега.

Нет, не знаешь. Обратите внимание на родительский тег ? Это указывает на то, что тег ApplicationIcon является свойством MsBuild, поэтому в этом случае действителен атрибут Condition.

<PropertyGroup>
  <ApplicationIcon Condition=" '$(Platform)' == 'x86' ">x86.ico</ApplicationIcon>
  <ApplicationIcon Condition=" '$(Platform)' == 'x64' ">x64.ico</ApplicationIcon>
</PropertyGroup>

Черт возьми, если ваши имена файлов разрешаются в значение свойства MsBuild, как это сделано выше, вы можете вывести имя файла следующим образом:

<PropertyGroup>
  <ApplicationIcon>$(Platform).ico</ApplicationIcon>
</PropertyGroup>

РЕДАКТИРОВАТЬ: Представьте, что указанное выше использует и правильно оценивает значения свойства $ (Configuration), а не $ (Platform)

2
Nicodemeus 8 Янв 2014 в 20:02

Я попытался щелкнуть проект правой кнопкой мыши, выбрать «Свойства» и перейти на вкладку «Приложение». Здесь вы можете изменить файл значка. Однако раскрывающиеся меню «Конфигурация» и «Платформа» отключены. Это подтверждает, что если вы можете иметь разные файлы значков для разных сборок, это будет непростой путь.

Если вы выполняете какие-либо сценарии для настройки своей сборки, вы можете «предварительно обработать» файл *.csproj, установив ApplicationIcon на основе желаемой сборки, а затем построить проект.

0
Keeler 8 Янв 2014 в 18:30