다음과 같은 설치가 있습니다. ASP.Net MVC .Net 4.0 솔루션 (5 개 프로젝트 포함) 및 여러 솔루션 구성 (Site1-Stage, Site1-Live, Site2-Stage 등). 그 이유는 간단합니다. 동일한 코드베이스를 여러 구성 설정으로 여러 서버에 배포합니다.MSBuild - 배포 할 때 "AfterBuild"대상을 강제로 설정하는 방법은 무엇입니까?
이러한 구성을 관리하기 위해 Troy Hunt가 설명한 You're deploying it wrong! TeamCity, Subversion & Web Deploy part 1: Config transforms 문서의 접근 방식을 사용합니다. 2 개 즉 - 나는 나의 SVN의의 repo에 의 Web.config이없는 대신 내가 가진 Web.Base.Config, Web.Site1-Stage.Config 등, 프로젝트에 XmlTransformation 작업 AfterBuild 목표. 빌드하는 동안 필요한 의 Web.config 선택 구성을 기반으로 생성됩니다 여기
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterBuild">
<TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" StackTrace="true" />
</Target>
문제는 온다 : 나는이 같은 MSBuild를 실행있을 때 :
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild
모두가 간다 음, Site1-Stage 구성에 대해 web.config가 올바르게 생성되었습니다. 그러나, 나는이 명령을 실행하는 경우 : I 명시 적으로 MSBuild를 명령 줄에 "AfterBuild"대상을 추가하려고
"MySolution.sln" (rebuild target) (1) -> "MySolution\MyWebProj.csproj" (Rebuild target) (3) -> (PreTransformWebConfig target) -> C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.5\Web\Microsoft.Web.Publishing.targets(1399,5): error : Copying file Web.config to obj\Site1-Stage\TransformWebConfig\original\Web.config failed. Could not find file 'Web.config'. [MySolution\MyWebProj.csproj]
: 나는 다음과 같은 오류 얻을
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild /P:DeployOnBuild=True
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild,AfterBuild /P:DeployOnBuild=True
을하지만, 동일한 오류가 발생했습니다.
왜 내가 이것을 필요로합니까 : 그것은 매우 고립 된 예이며 실제로 TeamCity CI 서버에서 자동 게시를 설정하려고합니다. 내 현재 게시 단계 이전에 "Visual Studio (sln)"러너로 새 빌드 단계를 추가하면 처음에는 프로젝트를 다시 작성하고 web.config를 생성 한 다음 게시합니다. 그러나, 나는 (지금 약 20) 게시 단계를 많이 가지고 있고 그것을 피하고 싶습니다. 내 이해는 "게시"프로세스는 빌드를 빌드의 일부로 수행하므로 "재사용"하고 싶습니다.
질문 : 구성 변환을 강제 실행하려면 내 MSBuild 명령 줄을 어떻게 수정해야합니까?
감사합니다.
'AfterBuild' 대상에 출력이 없습니다. MSBuild는이 타겟이 최신이라고 생각하는 것을 건너 뜁니다. 'AfterBuild' 타겟 출력에 출력 ('Web.Config')을 추가하십시오. – Romeo
아마도 "BeforeBuild"를 사용할 수 있습니까? BTW csproj에 web.config가 포함되어 있습니까? 나는 대부분의 출판 활동이 폴더가 아닌 프로젝트의 항목에 의존한다고 생각합니다. 그러나 확인하지는 않았습니다. 그렇지 않은 경우 - 웹을 포함 할 수 있습니다.config에서 프로젝트를 제외하고 여전히 소스 제어에서 제외했습니다. – Lanorkin
@Lanorkin - 그게 효과가 있습니다! 고마워요. 답변으로 의견을 게시하십시오. – avs099