Измените имя exe в зависимости от символа условной компиляции

Можно ли сказать Visual Studio производить другое имя EXE-файла в зависимости от того, если определенный символ условной компиляции установлен?

9
задан Patrick 10 September 2012 в 19:15
поделиться

3 ответа

Поскольку определение условия в теге assemblyname, как предложил Фредрик, кажется, делает Visual Studio раздражительной, вы можете изменить имя сборки позже в файле csproj. Использование элемента Choose похоже на оператор if, поэтому имя может быть добавлено при выполнении условия, как показано ниже.

Получить подстроку из, например, DefineConstants в атрибуте condition не представляется возможным (согласно MSDN) с "простым ванильным MSBuild", но можно определить свои собственные цели сборки и установить свойство при компиляции с помощью /p: Tag=value (MSBuild command line reference)

  ...
  <Tag>true</Tag>
</PropertyGroup>
<Choose>
  <When Condition=" '$(Tag)' == 'true' ">
    <PropertyGroup>
      <AssemblyName>$(AssemblyName).TagDefined</AssemblyName>
    </PropertyGroup>
  </When>
</Choose>
<ItemGroup>
...
5
ответ дан 4 December 2019 в 11:40
поделиться

Если вы загрузите файл .csproj в текстовый редактор, вы сможете управлять свойством AssemblyName:

<AssemblyName Condition="'$(Configuration)' == 'Debug'">WindowsFormsApplication9.Debug</AssemblyName>
<AssemblyName Condition="'$(Configuration)' != 'Debug'">WindowsFormsApplication9</AssemblyName>

Обратите внимание, что это изменяет не только имя файла, но и имя сборки, что может означать проблемы, если у вас есть другой код, ссылающийся на сборку.

Я никогда не делал этого сам, поэтому не могу сказать, насколько хороша или плоха эта идея.

11
ответ дан 4 December 2019 в 11:40
поделиться

Вы можете редактировать файл csproj, который является просто файлом MSBuild, содержащим "задачи". В файле csproj есть секция, которая называется 'AfterBuild'.

Возможно, вы можете добавить туда команду, которая переименует ваш exe-файл в выбранное вами имя.
(Конечно, вам придется откомментировать этот раздел).

Возможно, что-то вроде этого:

<Target Name="AfterBuild">
     <Copy SourceFiles="" DestinationFiles="" Condition="" />
     <Delete Files="" Condition="" />
</Target>

Я не проработал это дальше, но вы должны дополнить атрибут Condition, чтобы можно было проверить, определен ли условный символ или нет.

1
ответ дан 4 December 2019 в 11:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: