2013-04-10 1 views
6

다음과 같은 설치가 있습니다. 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 명령 줄을 어떻게 수정해야합니까?

감사합니다.

+0

'AfterBuild' 대상에 출력이 없습니다. MSBuild는이 타겟이 최신이라고 생각하는 것을 건너 뜁니다. 'AfterBuild' 타겟 출력에 출력 ('Web.Config')을 추가하십시오. – Romeo

+1

아마도 "BeforeBuild"를 사용할 수 있습니까? BTW csproj에 web.config가 포함되어 있습니까? 나는 대부분의 출판 활동이 폴더가 아닌 프로젝트의 항목에 의존한다고 생각합니다. 그러나 확인하지는 않았습니다. 그렇지 않은 경우 - 웹을 포함 할 수 있습니다.config에서 프로젝트를 제외하고 여전히 소스 제어에서 제외했습니다. – Lanorkin

+0

@Lanorkin - 그게 효과가 있습니다! 고마워요. 답변으로 의견을 게시하십시오. – avs099

답변

4

"BeforeBuild"를 사용할 수 있습니까?

BTW csproj에 web.config가 있습니까? 나는 대부분의 출판 활동이 폴더보다는 프로젝트의 항목에 의존한다고 믿습니다. 프로젝트에 web.config를 포함 할 수 있지만 여전히 소스 제어에서 제외했습니다.

+1

"BeforeBuild"타겟을 사용했고 효과가있었습니다. – avs099

+0

@ avs099, web.config를 프로젝트 또는 소스 컨트롤에 포함시켜야합니까? (비록 그것이 변형에 의해 덮어 씌워 질지라도 ...) – Mobigital

+0

@Mobigital 나는 그것을 포함하지 않는다. – avs099