ClickOnce 응용 프로그램 배포를 Team Build에 추가
일단, "Publish" 동작을 Team Build에 추가하는 것은 매우 간단합니다.
Incorporating a ClickOnce Application into your Team Build
; http://blogs.vertigosoftware.com/teamsystem/archive/2007/02/20/Incorporating_a_ClickOnce_Application_into_your_Team_Build.aspx
와~~~. 그냥 SolutionToPublish 노드만 추가해 주면 됩니다.
그런데... 저 같은 경우에는 이상하게 다음과 같은 오류가 팀 빌드에서 발생했습니다.
[Any CPU/Release] C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(2341,9):
error MSB3190: ClickOnce does not support the request execution level 'requireAdministrator'.
이상하네요. 저는 ClickOnce로 배포되는 프로젝트의 app.manifest에 asInvoker로 지정해 두었는데 위에서는 requireAdministrator라고 지정되었다면서 오류가 발생한 것입니다. 음... 가만히 보니, ^^; SolutionToPublish로 지정한 경우에 해당 솔루션에 포함된 모든 EXE 프로젝트를 Publish 하는 것을 알 수 있었습니다. 즉, 솔루션에 포함된 콘솔 응용 프로그램 프로젝트 하나가 "requireAdministrator"로 지정되어 있었는데 그것까지도 배포하려고 하다 보니 오류가 발생한 것이었습니다.
일단은, 그 프로젝트의 manifest 파일을 수정해서 팀 빌드를 성공시켰습니다.
여기서 하나 더 아쉬운 점이 있는데, SolutionToPublish는 "배포까지" 시켜주지는 않고 "배포를 위한 파일"만을 빌드시켜주는 것입니다. 그래서, 팀 빌드 프로젝트에 "Application Files" 폴더만 생성되는 것이지요. 따라서, 실제 "배포까지" 시켜주려면 다음과 같이 복사해주는 과정까지 포함해주어야 합니다.
<Target Name="AfterDropBuild">
<!-- ClickOnce 응용 프로그램 배포 -->
<Exec IgnoreExitCode="false"
Command="robocopy "$(OutDir)Application Files" "\\TargetMachine\Deploy\Application Files" /S" />
<Exec IgnoreExitCode="false"
Command="copy "$(OutDir)TestApp.application" "\\TargetMachine\Deploy" " />
</Target>
마지막으로... 개발자 PC에서 "Publish" 할 때는 버전이 자동으로 바뀌었지만 (물론, check-out도 자동으로 되고.) 팀 빌드에서 배포할 때는 버전이 자동으로 바뀌지 않습니다. 따라서, 코드 변경을 한 후 팀 빌드를 통해서 배포를 하려면 명시적으로 배포 버전을 올려주어야 합니다.
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]