2011-08-05 5 views
3

일부 web.config 파일을 설정하기 위해 MsBuild 및 TransformXml 작업을 사용하고 있습니다. 그게 다 잘된 일이지만, 이제 XML 변환 내에서 MSBuild 속성을 확장하고 싶습니다. TransformXml 작업에서 MSbuild 속성을 사용하는 방법?

더 명확하게하기 위해, 나는 배치 단지 구성이 다른 여러 웹 사이트에 대한 몇 가지 변환을 수행하는 itemgroup를 사용하여 TransformXml 작업 :하지만,이 완전히 잘 작동

<PropertyGroup> 
    <WebsiteTargetDirectory>$(MSBuildProjectDirectory)\BUILD\</WebsiteTargetDirectory> 
</PropertyGroup> 

<ItemGroup> 
    <WebsitesToBeCopied Include="CH;DE;EN"> 
    <InProject>false</InProject> 
    </WebsitesToBeCopied> 
</ItemGroup> 

<target name="CreateWebConfigs"> 
    <TransformXml 
    Source="$(MSBuildProjectDirectory)\Web.Template.config" 
    Transform="$(MSBuildProjectDirectory)\Web.%(WebsitesToBeCopied.Identity).config" 
    Destination="$(WebsiteTargetDirectory)\%WebsitesToBeCopied.Identity)\Web.config" 
    /> 
</target> 

나는 여러 줄 여유가있을 변환시 일부 MSBuild 속성을 가져올 가능성이있는 경우 변환이 필요합니다. 예를 들어 속성 ​​값에 'DE', 'EN'또는 'CH'를 추가해야하고 모든 web.config에 대한 변환을 작성하는 대신 템플릿에서 자리 표시자를 사용하는 것이 좋습니다.

이것을 달성 할 수있는 방법이 있습니까? 그렇다면 어떻게 작동합니까?

+0

혼자 해결 방법을 찾았습니다. TransformXml taks 직후에 MSBuildExtensionPack의 Detokenize 작업을 사용하여 두 번째 단계에서 내 변수를 파일에 넣을 수 있습니다. –

+0

지금 대답 할 수 있어야합니다. 이틀 안에 정답으로 선택할 수 있습니다. – Will

답변

4

혼자 해결 방법을 찾았습니다.

TransformXml 작업 직후 MSBuildExtensionPackDetokenise 작업을 사용하여 두 번째 단계에서 변환 된 파일에 내 변수를 넣을 수 있습니다. 파일의 자리 표시 자로 원래 $ (PropertyName) 구문을 사용해야하고 추가 작업이 자동으로 파일을 대체합니다.

+0

이것은 이전에 사용한 솔루션입니다 (미안하지만 이전에 회신하지 못했습니다!). Detokenise 작업에는 호출자로부터 전달 된 속성을 제공하지 않는다는 점에서 제한이 있습니다. MSBUILD 명령 줄 필요한 경우 내가 게시 할 수있는 해결 방법을 개발했습니다. –

+0

나는 해결책으로 어떤 방향을 제시하기 때문에 유용하다고 투표했다. 한 가지는 링크가 Detokenise로 깨졌습니다. – Byron

관련 문제