빌드 후 이벤트를 한 유형의 빌드에서만 실행하도록 제한하려면 어떻게해야합니까?
이벤트를 사용하여 DLL 파일을 로컬 IIS 가상 디렉터리에 복사하고 있지만 릴리스 모드의 빌드 서버에서는 이러한 일이 발생하지 않습니다.
답변
사전 및 사후 빌드 이벤트는 배치 스크립트로 실행됩니다. 에 조건문을 작성할 수 있습니다 $(ConfigurationName)
.
예를 들어
if $(ConfigurationName) == Debug xcopy something somewhere
답변
참고로 goto를 사용할 필요는 없습니다. 쉘 IF 명령은 대괄호와 함께 사용할 수 있습니다.
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".
)
답변
일반적인 빌드 후 이벤트를 추가하십시오. 그런 다음 프로젝트를 저장하고 메모장 (또는 선호하는 편집기) 에서 열고 PostBuildEvent 속성 그룹에 조건을 추가하십시오. 예를 들면 다음과 같습니다.
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
답변
또는 (이벤트가 배치 파일에 저장된 후 호출되므로) 배치 파일이 아닌 빌드 이벤트 상자에서 다음을 사용하십시오.
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
이 방법은 당신이 어떤 구성을위한 이벤트가, 여전히 다소 배치 파일로 전달하는 것보다 매크로와 그것을 관리하고, 그 기억이 %1
있다 $(OutputPath)
등
답변
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>
UI는이를 설정하는 방법을 제공하지 않지만 UI Configuration
를 통해 변경하면 속성을 그대로 유지하는 것처럼 보입니다 .
답변
구성 이름을 빌드 후 스크립트에 전달하고 체크인하여 실행해야하는지 확인할 수 있습니다.
로 구성 이름을 전달하십시오 $(ConfigurationName)
.
이를 확인하는 것은 빌드 후 단계를 구현하는 방법을 기반으로하며 명령 행 인수가됩니다.