답변:
사전 및 사후 빌드 이벤트는 배치 스크립트로 실행됩니다. 에 조건문을 작성할 수 있습니다 $(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".
)
"$(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>
UI는이를 설정하는 방법을 제공하지 않지만 UI Configuration
를 통해 변경하면 속성을 그대로 유지하는 것처럼 보입니다 .
이것은 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")
모든 프로젝트 설정과 마찬가지로 빌드 이벤트는 구성별로 구성 할 수 있습니다. 속성 페이지 대화 상자의 드롭 다운에서 변경하려는 구성을 선택하고 빌드 후 단계를 편집하십시오.
Visual Studio 2012에서는 사용해야합니다 (Visual Studio 2010에서도 생각합니다)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
매크로로 표시되었지만 할당되지 않았습니다.
비교 : 빌드 명령 및 속성에 대한 매크로