2013-10-18 5 views
2

MSBuild 확장 팩을 사용하여 .proj 파일의 줄을 바꿉니다. 여러 줄을 여러 줄로 바꿉니다. 출력 할 줄은 변환 할 때도 끝에 세미 콜론이 있습니다.MSBuild에서 세미콜론을 제외하는 방법 ExtensionPack.FileSystem.File Replacements

<ItemGroup> 
; <Reference Include="Stuff"> 
;  <HintPath>..\..\packages\secret.dll</HintPath> 
;  <Private>True</Private> 
; </Reference> 
;</ItemGroup> 

(가) 여전히 변환 그들도 거기에있다없이 그 일 :

<ItemGroup> 
    <TestFile Include="regextest.xml" /> 
    <MyLines Include ="%3CItemGroup%3E%0A"/> 
    <MyLines Include ="%09%3CReference Include=%22Stuff%22%3E%0A" /> 
    <MyLines Include ="%09%09%3CHintPath%3E..\..\packages\secret.dll%3C/HintPath%3E%0A" /> 
    <MyLines Include ="%09%09%3CPrivate%3ETrue%3C/Private%3E%0A" /> 
    <MyLines Include ="%09%3C/Reference%3E%0A" /> 
    <MyLines Include ="%3C/ItemGroup%3E%0A" /> 
</ItemGroup> 


<Target Name="Default"> 
    <MSBuild.ExtensionPack.FileSystem.File TaskAction="Replace" 
     TextEncoding="ASCII" 
     RegexPattern="%3CProjectReference" 
     RegexOptionList="IgnoreCase" 
     Replacement="@(MyLines->'%(Identity)')" 
     Files="@(TestFile)" /> 
</Target> 

는 그리고 이것은 출력됩니다.

답변

2

여러 줄 바꾸기 문자열을 처리하는 쉬운 방법 중 하나는 한 줄짜리 항목 모음 대신 속성 내부에 CDATA 블록으로 양식을 작성하는 것입니다 (세미콜론의 출처). 이 경우,이 속성으로 여러 줄 대체 문자열을 만들 수 있습니다 다음 항목에 값을 할당 한 다음 Replace 작업 동작에 항목을 통과 :

<PropertyGroup> 
    <MyMultiLine> 
    <![CDATA[ 
    %3CItemGroup%3E 
    %3CReference Include="Stuff"%3E 
     %3CHintPath%3E..\..\packages\secret.dll%3C/HintPath%3E 
     %3CPrivate>True%3C/Private%3E 
    %3C/Reference%3E 
    %3C/ItemGroup%3E 
    ]]> 
    </MyMultiLine> 
</PropertyGroup> 

<ItemGroup> 
    <TestFile Include="regextest.xml" /> 
    <MyMultiLineItem Include="$(MyMultiLine)" /> 
</ItemGroup> 

<Target Name="Default"> 
    <MSBuild.ExtensionPack.FileSystem.File TaskAction="Replace" 
     TextEncoding="ASCII" 
     RegexPattern="%3CProjectReference" 
     RegexOptionList="IgnoreCase" 
     Replacement="@(MyMultiLineItem ->'%(Identity)')" 
     Files="@(TestFile)" /> 
</Target> 
+0

작품을 멋지고! 대단히 감사합니다! 이제는 에서로 캡처하는 방법을 알아야합니다. 그러면 좋은 모양이됩니다! –

+0

RegexPattern = "(% 3CProjectReference) (. * \ n) {4} (. * ProjectReference % 3E)"이 4 줄은 내 특별한 경우이지만 다른 사람에게 도움이 될 수 있습니다. –