Odpowiedzi:
Zdarzenia przed i po kompilacji są uruchamiane jako skrypt wsadowy. Możesz wykonać instrukcję warunkową $(ConfigurationName)
.
Na przykład
if $(ConfigurationName) == Debug xcopy something somewhere
Do twojej wiadomości, nie musisz używać goto. Polecenia IF powłoki można używać z nawiasami okrągłymi:
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)"
(zawiadomienie cytaty) jeśli się kod błędu 255
$(ConfigurationName)
jest pusty (wiersz polecenia zdarzenia po kompilacji). if "$(Configuration)" == "Debug"
pracował dla mnie. BTW, jeśli chcesz zrobić coś we wszystkich innych konfiguracjach, użyj if NOT "$(Configuration)" == "Debug"
.
Dodaj swoje wydarzenie po kompilacji jak zwykle. Następnie zapisz projekt, otwórz go w Notatniku (lub ulubionym edytorze) i dodaj warunek do grupy właściwości PostBuildEvent. Oto przykład:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
rozwinięty do cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Zmienne makro i prace wszystko jak zwykle.
Alternatywnie (od zdarzenia są umieszczane w pliku wsadowym, a następnie nazywa), należy skorzystać z następujących (w oknie zdarzeń budowy, a nie w pliku wsadowym):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
W ten sposób możesz mieć zdarzenia dla dowolnej konfiguracji i nadal zarządzać nimi za pomocą makr, zamiast przekazywać je do pliku wsadowego, pamiętaj, że tak %1
jest $(OutputPath)
itp.
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
i użyćgoto :$(ConfigurationName)
Visual Studio 2015: poprawna składnia to (trzymaj ją w jednym wierszu):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Błąd 255 nie tutaj.
Począwszy od Visual Studio 2019, nowoczesny .csproj
format obsługuje dodawanie warunku bezpośrednio do Target
elementu:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
Interfejs użytkownika nie zapewnia sposobu skonfigurowania tego, ale wydaje się, że bezpiecznie pozostawia ten Configuration
atrybut na miejscu, jeśli wprowadzisz zmiany za pomocą interfejsu użytkownika.
Możesz przekazać nazwę konfiguracji do skryptu po kompilacji i sprawdzić go tam, aby sprawdzić, czy powinien zostać uruchomiony.
Przekaż nazwę konfiguracji za pomocą $(ConfigurationName)
.
Sprawdzanie zależy od tego, jak wdrażasz krok po kompilacji - będzie to argument wiersza polecenia.
Działa to dla mnie w Visual Studio 2015.
Kopiuję wszystkie pliki DLL z folderu znajdującego się w folderze biblioteki na tym samym poziomie co folder rozwiązania do katalogu docelowego budowanego projektu.
Użycie ścieżki względnej z mojego katalogu projektu i przejście do struktury folderów dwa kroki za pomocą .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Jak każde ustawienie projektu, elementy konfiguracyjne można skonfigurować dla każdej konfiguracji. Po prostu wybierz konfigurację, którą chcesz zmienić, z menu rozwijanego okna Strony właściwości i edytuj krok po kompilacji.
W Visual Studio 2012 musisz użyć (myślę, że także w Visual Studio 2010)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
został wymieniony jako makro, ale nie został przypisany.