Відповіді:
Події до і після збирання запускаються як пакетний сценарій. Можна зробити умовне твердження на $(ConfigurationName)
.
Наприклад
if $(ConfigurationName) == Debug xcopy something somewhere
FYI, вам не потрібно використовувати goto. Команду IF shell можна використовувати з круглими дужками:
if $(ConfigurationName) == Debug (
copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
echo "why, Microsoft, why".
)
"$(ConfigurationName)"
(зверніть увагу на котирування), якщо ви отримаєте код помилки 255
$(ConfigurationName)
порожній (командний рядок події після складання). if "$(Configuration)" == "Debug"
працював на мене. BTW, якщо ви хочете зробити щось у всіх інших конфігураціях, використовуйте if NOT "$(Configuration)" == "Debug"
.
Додайте подію побудови публікацій як звичайну. Потім збережіть проект, відкрийте його в Блокноті (або улюбленому редакторі) та додайте умову до групи властивостей PostBuildEvent. Ось приклад:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
розширено до cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Змінні макросу і все працює як нормально.
Як варіант (оскільки події поміщаються у пакетний файл і потім викликаються), використовуйте наступне (у полі Подія побудови, а не у пакетному файлі):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
Таким чином, ви можете мати події для будь-якої конфігурації, і все ще керувати ними за допомогою макросів, а не передавати їх у пакетний файл, пам’ятайте, що %1
це $(OutputPath)
і т.д.
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
та використовуватиgoto :$(ConfigurationName)
Visual Studio 2015: Правильний синтаксис (тримати його в одному рядку):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Тут немає помилки 255.
Станом на Visual Studio 2019, сучасний .csproj
формат підтримує додавання умови безпосередньо на Target
елемент:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
Користувальницький інтерфейс не забезпечує спосіб налаштування цього, але, схоже, безпечно залишає Configuration
атрибут на місці, якщо ви вносите зміни через інтерфейс користувача.
Ви можете передати ім'я конфігурації в сценарій після збирання і перевірити його там, щоб побачити, чи слід воно запускати.
Передайте ім'я конфігурації за допомогою $(ConfigurationName)
.
Перевірка його ґрунтується на тому, як ви реалізуєте крок після збирання - це буде аргумент командного рядка.
Це працює для мене у Visual Studio 2015.
Я копіюю всі DLL-файли з папки, що знаходиться в папці бібліотеки на тому ж рівні, що і моя папка рішення, у цільовий каталог проекту, який будується.
Використовуючи відносний шлях з мого каталогу проектів і збираючись вгору по структурі папки два кроки з .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Як і будь-яке налаштування проекту, buildevents можна налаштувати за конфігурацією. Просто виберіть конфігурацію, яку потрібно змінити, у спадному вікні діалогового вікна "Властивості" та відредагуйте крок створення повідомлення.
У Visual Studio 2012 ви повинні використовувати (я думаю, і в Visual Studio 2010)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
був вказаний як макрос, але він не був призначений.
Порівняйте: Макроси для команд і властивостей збірки