2014-04-04 2 views
0

반복 명령의 리팩토링을 구축 한 부분은,이 볼 수 있듯이MS는 내가 MSBuild에서 파일이

<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$Version\$" ReplacementText="$(Version)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$SolutionName\$" ReplacementText="$(SolutionName)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$Authors\$" ReplacementText="$(Authors)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$Owners\$" ReplacementText="$(Owners)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$Summary\$" ReplacementText="$(Summary)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$Description\$" ReplacementText="$(Description)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$Tags\$" ReplacementText="$(Tags)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$ProjectUrl\$" ReplacementText="$(ProjectUrl)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$IconUrl\$" ReplacementText="$(IconUrl)" /> 
<ReplaceFileText InputFilename="$(SolutionDir)$(SolutionName).nuspec" 
       MatchExpression="\$BuildDir\$" ReplacementText="$(BuildDir)" /> 

(템플릿 nuspec 파일을 채우기를 생성하는) 파일에 텍스트 교체의 무리를 않습니다 대체되는 실제 텍스트를 제외하고는 중복되는 톤이며 속성 이름 (그 자체는 동일합니다)입니다.

이 방법을 다시 작성 하시겠습니까? 나는 적당한 명령을 찾는 것이별로 행운이 아니다.

ps. ReplaceFileText는 사용자 지정 작업입니다.

답변

1

".nuspec 파일 이상으로 변경하고 싶다면 어떻게해야합니까?"라고 혼란스러워 할 수 있습니다. 그러나 이것을 읽을 수 있도록 리팩토링하려고합니다.

"MsBuild.exe Batching.proj"를 사용하여 명령 줄에서 호출 할 수있는 "batching.proj"라고하는 샘플 프로젝트를 만들고 출력을 봅니다.

<Project ToolsVersion="4.0" DefaultTargets="ReplaceFileText" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- Here are some sample properties that will appear throughout the script... --> 
    <PropertyGroup> 
     <SolutionDir>c:\MsBuild\</SolutionDir> 
     <SolutionName>Batching</SolutionName> 
     <Version>1.0.0.1</Version> 
     <Authors>Authors</Authors> 
     <Owners>Owner list</Owners> 
     <Summary>Lorem ipsum dolor sit amet.</Summary> 
     <Description>Consectetur adipiscing elit.</Description> 
     <Tags>lists, tags, collections</Tags> 
     <ProjectUrl>ProjectUrl</ProjectUrl> 
     <IconUrl>IconUrl</IconUrl> 
     <BuildDir>c:\MsBuild\Build\</BuildDir> 
    </PropertyGroup> 
    <ItemGroup> 
     <!-- In the custom item group, lets say we want to perform that replacement command on multiple input files. --> 
     <ReplaceFiles Include="$(SolutionDir)$(SolutionName).nuspec;$(SolutionDir)$(SolutionName).oldspec;$(SolutionDir)$(SolutionName).brrwdspec;$(SolutionDir)$(SolutionName).bluspec" /> 
     <!-- Add our Key-Value pairs in their own itemgroup --> 
     <MatchExpression Include="\$Version\$"> 
      <Text>$(Version)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$SolutionName\$"> 
      <Text>$(SolutionName)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$Authors\$"> 
      <Text>$(Authors)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$Owners\$"> 
      <Text>$(Owners)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$Summary\$"> 
      <Text>$(Summary)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$Description\$"> 
      <Text>$(Description)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$Tags\$"> 
      <Text>$(Tags)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$ProjectUrl\$"> 
      <Text>$(ProjectUrl)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$IconUrl\$"> 
      <Text>$(IconUrl)</Text> 
     </MatchExpression> 
     <MatchExpression Include="\$BuildDir\$"> 
      <Text>$(BuildDir)</Text> 
     </MatchExpression> 
    </ItemGroup> 
    <!-- Our custom target batches over each input file in @(ReplaceFiles). 
    The Message task will 
    iterate over each @(MatchExpression) ItemGroup member invoking the message 
    task each time. This is where you'd call your custom replacement task. --> 
    <Target Name="ReplaceFileText" Inputs="@(ReplaceFiles)" Outputs="%(ReplaceFiles->'%(Identity).xml')"> 
     <!-- Add your ReplaceFileText call here. --> 
     <Message Text="In file @(ReplaceFiles) replacing &quot;%(MatchExpression.Identity)&quot; with &quot;%(MatchExpression.Text)&quot; " Importance="High" /> 
    </Target> 
</Project> 

출력 :

ReplaceFileText: 
    In file c:\MsBuild\Batching.nuspec replacing "\$Version\$" with "1.0.0.1" 
    In file c:\MsBuild\Batching.nuspec replacing "\$SolutionName\$" with "Batching" 
    In file c:\MsBuild\Batching.nuspec replacing "\$Authors\$" with "Authors" 
    In file c:\MsBuild\Batching.nuspec replacing "\$Owners\$" with "Owner list" 
    In file c:\MsBuild\Batching.nuspec replacing "\$Summary\$" with "Lorem ipsum dolor sit amet." 
    In file c:\MsBuild\Batching.nuspec replacing "\$Description\$" with "Consectetur adipiscing elit." 
    In file c:\MsBuild\Batching.nuspec replacing "\$Tags\$" with "lists, tags, collections" 
    In file c:\MsBuild\Batching.nuspec replacing "\$ProjectUrl\$" with "ProjectUrl" 
    In file c:\MsBuild\Batching.nuspec replacing "\$IconUrl\$" with "IconUrl" 
    In file c:\MsBuild\Batching.nuspec replacing "\$BuildDir\$" with "c:\MsBuild\Build\" 
ReplaceFileText: 
    In file c:\MsBuild\Batching.oldspec replacing "\$Version\$" with "1.0.0.1" 
    In file c:\MsBuild\Batching.oldspec replacing "\$SolutionName\$" with "Batching" 
    In file c:\MsBuild\Batching.oldspec replacing "\$Authors\$" with "Authors" 
    In file c:\MsBuild\Batching.oldspec replacing "\$Owners\$" with "Owner list" 
    In file c:\MsBuild\Batching.oldspec replacing "\$Summary\$" with "Lorem ipsum dolor sit amet." 
    In file c:\MsBuild\Batching.oldspec replacing "\$Description\$" with "Consectetur adipiscing elit." 
    In file c:\MsBuild\Batching.oldspec replacing "\$Tags\$" with "lists, tags, collections" 
    In file c:\MsBuild\Batching.oldspec replacing "\$ProjectUrl\$" with "ProjectUrl" 
    In file c:\MsBuild\Batching.oldspec replacing "\$IconUrl\$" with "IconUrl" 
    In file c:\MsBuild\Batching.oldspec replacing "\$BuildDir\$" with "c:\MsBuild\Build\" 
ReplaceFileText: 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$Version\$" with "1.0.0.1" 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$SolutionName\$" with "Batching" 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$Authors\$" with "Authors" 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$Owners\$" with "Owner list" 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$Summary\$" with "Lorem ipsum dolor sit amet." 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$Description\$" with "Consectetur adipiscing elit." 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$Tags\$" with "lists, tags, collections" 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$ProjectUrl\$" with "ProjectUrl" 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$IconUrl\$" with "IconUrl" 
    In file c:\MsBuild\Batching.brrwdspec replacing "\$BuildDir\$" with "c:\MsBuild\Build\" 
ReplaceFileText: 
    In file c:\MsBuild\Batching.bluspec replacing "\$Version\$" with "1.0.0.1" 
    In file c:\MsBuild\Batching.bluspec replacing "\$SolutionName\$" with "Batching" 
    In file c:\MsBuild\Batching.bluspec replacing "\$Authors\$" with "Authors" 
    In file c:\MsBuild\Batching.bluspec replacing "\$Owners\$" with "Owner list" 
    In file c:\MsBuild\Batching.bluspec replacing "\$Summary\$" with "Lorem ipsum dolor sit amet." 
    In file c:\MsBuild\Batching.bluspec replacing "\$Description\$" with "Consectetur adipiscing elit." 
    In file c:\MsBuild\Batching.bluspec replacing "\$Tags\$" with "lists, tags, collections" 
    In file c:\MsBuild\Batching.bluspec replacing "\$ProjectUrl\$" with "ProjectUrl" 
    In file c:\MsBuild\Batching.bluspec replacing "\$IconUrl\$" with "IconUrl" 
    In file c:\MsBuild\Batching.bluspec replacing "\$BuildDir\$" with "c:\MsBuild\Build\"