[visual-studio] 디버그 빌드 전용 Visual Studio 빌드 후 이벤트를 실행하는 방법

빌드 후 이벤트를 한 유형의 빌드에서만 실행하도록 제한하려면 어떻게해야합니까?

이벤트를 사용하여 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).

이를 확인하는 것은 빌드 후 단계를 구현하는 방법을 기반으로하며 명령 행 인수가됩니다.