2012-05-08 5 views
32

대상으로 사용할 빌드 환경이 두 개 있습니다. 릴리스 및 스테이징.web.config 파일을 명령 줄에서 변환

<system.web>  
    <authentication mode="Windows"> 
    </authentication> 

    <authorization> 
     <deny users="?" /> 
    </authorization> 
</system.web> 

내가 준비 설정을 구축하여 변환 할 :의 Web.config은 다음과 같습니다 Web.Staging.config는

<system.web>  
    <authentication mode="Windows"> 
    </authentication> 

    <authorization xdt:Transform="Replace"> 
     <deny users="?" /> 
     <allow roles="StagingRoles" /> 
     <deny users="*" /> 
    </authorization> 
</system.web> 

나는 다음과 같이 명령 줄에서 구축 :

msbuild buildscript.build /p:Configuration=Staging 

빌드 후 build artifacts 폴더에서 변형 된 web.config 파일이 표시되지 않습니다. 여기 뭔가 잘못 되었나요? 당신이 당신의 웹 응용 프로그램의 .csproj 파일의 맨 아래에 다음 XML을 추가하는 경우

감사

답변

31

, 당신은 설정 변환이 발생하는 것을 확인합니다 모든 빌드하기 전에 :

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> 
<Target Name="BeforeBuild"> 
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
</Target> 

편집 : 귀하의 의견에 따라, Web.config를 TransformXml 작업의 소스 매개 변수로 사용할 수 있어야합니다 (2 단계 참조). 당신은 단지 설정은 빌드 스크립트 변환을 수행하려면 다음 지침을 따르

1) 빌드 스크립트의 가져 오기 WebApplication.targets과 같이 :

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> 

2)에 TransformXml 빌드 작업을 실행 빌드 스크립트 타겟 :

<Target Name="MyBuildScriptTarget"> 
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
    ...other build tasks... 
</Target> 
+0

빠른 응답을 보내 주셔서 감사합니다. 이 문제는 다른 설정 파일 인 Web.base.config를 유지해야한다는 것입니다. VS로 솔루션을 구축하면 필요없는 Web.config가 변환됩니다. 빌드 스크립트를 실행할 때 변환을 원합니다. –

+0

@sheldon_cooper 내 대답을 업데이트했습니다. –

+0

이것은 하나의 문제이지만 작동합니다. 변환이 발생하면 Web.config 파일이 다른 프로세스에서 사용 중입니다.나는 이것을 컴파일 타겟 다음에 호출했다. –

17

조나단의 대답은 좋습니다. 원본 Web.config 파일을 유지할 수 있도록 약간 수정했습니다. 다음은 내 .csproj 파일의 맨 아래에 추가 된 라인과 같습니다

<!-- the step to copy the config file first avoids a 'File is being used by another process' error --> 
    <Target Name="BeforeBuild"> 
    <Copy SourceFiles="Web.config" DestinationFiles="Web.temp.config" OverwriteReadOnlyFiles="True" /> 
    <TransformXml Source="Web.temp.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    <Copy SourceFiles="Web.temp.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" /> 
    <Delete Files="Web.temp.config" /> 
    </Target> 

내가 web.config 파일 비주얼 스튜디오 내에서 (또는 명령 줄에서) 빌드를 실행하여 변환되는 것을 볼 수 있습니다. 모든 Visual Studio 버전과 호환 될 수 있도록 웹 목표를 가져 오기위한 다음이 줄을 사용하여

: 조나단의 대답을 통해

+0

이 답변은 내 VS 프로젝트에서 내 원래 web.config 파일을 변경했을 때 훨씬 더 나은 b/c가되었습니다. –

+1

XML에 실수가 있습니다. TransformXml에서는 소스와 대상을 교체해야합니다. 그렇지 않으면 변환이 적용되지 않습니다. 어쨌든 당신의 답변에 대한 thatnks! 검색 후 며칠 만 웹에서 유일한 정답이 될 것 같습니다. – AlexProutorov

+0

Excellent. 감사. 우리는 이것을 할 필요가 없지만 (이전에 필요하지는 않았지만) 정말로 느낀다. 그러나 그것은 작동한다. –

5

작은 개선. 또한, 그 Web.config의 변환하지 않습니다를 참조하면 배포를 수행 할 때 그러나, 실제 변환이 발생, 이것은 젠킨스 변환을 빌드가 사용 버전 V10.0

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" /> 
0

에 연결되지 않습니다. 하나의 msbuild 명령을 모두 사용하여 빌드와 배포를 수행합니다.

MSBuild MyProj.csproj /P:Configuration=Release /P:DeployOnBuild=True /P:DeployTarget=MsDeployPublish /P:MsDeployServiceUrl=https://your server/msdeploy.axd /P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc /P:CreatePackageOnPublish=True /P:UserName=username /P:Password=password1 /P:DeployIISAppPath="Default Web Site or name of your website"

한 번 당신이 변환이 발생하는 서버에서 확인할 수 있습니다, 달렸다.