Вы можете указать Visual Studio вывести другое имя exe-файла в зависимости от того, установлен ли определенный условный символ компиляции?Изменить имя exe в зависимости от символа условной компиляции
ответ
Поскольку определение условия для тега asnamename, предложенное Fredrik, похоже, делает Visual Studio капризной, вы можете изменить имя сборки позже в файле csproj. Использование Choose element выглядит как оператор if, поэтому имя может быть добавлено, если условие выполнено, как показано ниже.
Получение подстроку из, например DefineConstants
в атрибуте состояние не представляется возможным (по 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>
...
Если вы загрузите файл .csproj в текстовом редакторе, вы можете управлять AssemblyName
свойством:
<AssemblyName Condition="'$(Configuration)' == 'Debug'">WindowsFormsApplication9.Debug</AssemblyName>
<AssemblyName Condition="'$(Configuration)' != 'Debug'">WindowsFormsApplication9</AssemblyName>
Примечание, однако, что это не только изменить имя файла, но сборки имя, который может означать проблему, если у вас есть другой код, ссылающийся на сборку.
Я никогда не делал этого сам, поэтому я не могу сказать, насколько хороша или плохая идея.
Вы можете отредактировать файл csproj, который является только файлом MSBuild, который содержит «задачи». В файле csproj есть раздел, который называется «AfterBuild».
Возможно, вы можете добавить туда команду, которая переименовывает ваш exe-файл в выбранное вами имя файла.
(Offcourse, вам придется расколоть этот раздел).
Возможно, что-то вроде этого:
<Target Name="AfterBuild">
<Copy SourceFiles="" DestinationFiles="" Condition="" />
<Delete Files="" Condition="" />
</Target>
Я не работал его дальше, но вы должны заполнить атрибут Condition, так что вы можете проверить, определен ли условный символ или нет.
Не пробовал, но это, тем не менее, перезаписывает существующий компилятор. * Возможно, я мог бы ввести PreBuild и скопировать существующее приложение, если оно существует *. Как мне ввести условие, если у меня есть специальный условный символ, введенный в тег 'DefineConstants' в файле csproj? – Patrick
Это не работает для меня. – Elmue
ни один из ответов здесь не работает для меня.
Они либо производят ошибки, либо ничего не делают.
Вот мое решение, которое работает в VS2005, и я полагаю, что оно также будет работать в новых версиях VS. Отредактируйте файл * .csproj как это:
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
if $(PlatformTarget) == x86 move /y "$(TargetPath)" "$(TargetDir)$(ProjectName)_32.exe"
if $(PlatformTarget) == x64 move /y "$(TargetPath)" "$(TargetDir)$(ProjectName)_64.exe"
</PostBuildEvent>
</PropertyGroup>
Результат будет что 32 бит компиляции создает файл ProjectName_32.exe
и 64 бит сборки производит ProjectName_64.exe
.
Обратите внимание на странный синтаксис. Не должно быть никаких скобок вокруг условия if
, а x86
не должно быть в кавычках.
Недостаток этого метода заключается в том, что вы больше не можете запускать Exe в отладчике, потому что Visual Studio не находит Exe, который он сгенерировал.Это можно было бы решить, заменив команду «move» командой «copy», но в этом случае вам придется скопировать Exe в другой каталог, потому что вы не хотите, чтобы один и тот же файл был дважды в том же каталоге.
Все это беспорядок. Действительно невероятно, что вы можете вводить выходной каталог непосредственно в настройках проекта, но для того, чтобы сделать что-то действительно основное, так как меняя имя Exe, вы должны написать такой неуклюжий скрипт, который имеет уродливые побочные эффекты. Позор Microsoft!
- 1. Можно ли добавить ссылку в проект C# в зависимости от значения условного символа компиляции (константа препроцессора)?
- 2. условной компиляции вопрос
- 3. C++ условной компиляции
- 4. Несколько проектов условной компиляции Delphi
- 5. константа условной компиляции уровня проекта
- 6. Шаблон шаблона условной компиляции
- 7. Как добиться условной компиляции в одном проекте в зависимости от символов в другом проекте?
- 8. Альтернативы условной компиляции в C#
- 9. Javascript: изменить в зависимости от того, IE7 или нет
- 10. Установите значение переменной в зависимости от значения в условной переменной
- 11. vim: завершение в зависимости от предыдущего символа
- 12. Как изменить имя переменной в зависимости от другой переменной?
- 13. изменить имя действия в зависимости от значения dropdownlist MVC
- 14. Как изменить имя столбца и значение в зависимости от условия?
- 15. Изменить имя класса все в зависимости от значения имени класса
- 16. Макросы условной компиляции не работает
- 17. прекомпилятора условной компиляции два случая
- 18. Как программно изменить свойства условной компиляции проекта VBA
- 19. Изменение условной компиляции в отношении проекта в Visual Studio
- 20. Как изменить имя .exe во время выполнения
- 21. Как изменить .exe имя проекта установки VS2015
- 22. Попытки упростить шаги для условной компиляции в C#
- 23. изменить имя файла exe и путь вывода
- 24. Изменить название приложения в зависимости от языка?
- 25. здание exe, включая зависимости
- 26. HTML условной компиляции сворачивается в MVC C#
- 27. Предварительная обработка условной компиляции в XAML
- 28. Javascript условной компиляции в GWT JSNI
- 29. C-стиль условной компиляции в golang
- 30. Зависимости от компиляции Android - Gradle Build
Как мне ввести условие для моего собственного символа, например, «NO_LOG» или что-то вместо выбора конфигурации? – Patrick
@Patrick: мои навыки msbuild не растягиваются так далеко. Эти константы входят в свойство 'DefineConstants', но все они входят в одно и то же значение свойства (' CONST1 = value; CONST2; CONST3') и, к сожалению, похоже, что не существует «содержит» -оператор, который может использоваться в Атрибуты «Условие». –
Проверьте эту тему: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/827eb72a-65fb-426c-862c-6095f71bd4bc –