2013-04-07 2 views
10

빌드하는 동안 몇 개의 파일을 연결하려고하지만 출력을 포맷하지 않고 탭과 공백을 제거하는 방식으로 시도합니다.MSBuild에서 파일을 연결하고 탭과 공백을 보존하는 방법

<CreateItem Include="Scripts\ApplicationModule.d.ts; Scripts\AccountModule.d.ts; Scripts\FeedModule.d.ts;"> 
    <Output TaskParameter="Include" ItemName="ApplicationDefinitionFiles" /> 
</CreateItem> 

<ReadLinesFromFile File="%(ApplicationDefinitionFiles.FullPath)"> 
    <Output TaskParameter="Lines" ItemName="ApplicationDefinitionLines" /> 
</ReadLinesFromFile> 

<WriteLinesToFile File="Scripts\ApplicationDefinition.d.ts" Lines="@(ApplicationDefinitionLines)" Overwrite="true" /> 

서식을 유지하는 방법은 무엇입니까?

+2

이 질문은 도움이 될 수 있습니다/설명 : http://stackoverflow.com/questions/272518/msbuild-readlinesfromfile-all-text-on-one-line –

답변

9

이것은 내가 같은 문제에 직면했을 때와 끝난 것입니다 : this answer에 제안

<Target Name="ConcatenateScripts"> 
    <!-- List all the files you want to concatenate. --> 
    <ItemGroup> 
    <ConcatFiles Include=" 
     Scripts\ApplicationModule.d.ts; 
     Scripts\AccountModule.d.ts; 
     Scripts\FeedModule.d.ts;"/> 
    </ItemGroup> 

    <!-- Read the contents of the files (preserving tabs/spaces). --> 
    <ItemGroup> 
    <FileContents Include="$([System.IO.File]::ReadAllText(%(ConcatFiles.Identity)))"/> 
    </ItemGroup> 

    <!-- Write the result to a single file. --> 
    <WriteLinesToFile File="Scripts\ApplicationDefinition.d.ts" Lines="@(FileContents)" Overwrite="true" /> 
</Target> 

<!-- Concatenate scripts on AfterBuild. --> 
<Target Name="AfterBuild"> 
    <CallTarget Targets="ConcatenateScripts"/> 
</Target> 

이는 수정 this blog post 버전하지만 ReadLinesFromFile 작업 대신 $([System.IO.File]::ReadAllText(...)를 사용하고 있습니다.

+0

VS2013에서는 작동하지 않습니다. –

+0

저는 VS2013 커뮤니티를 사용하고 있으며 제게 적합합니다. –

+0

VS2013 Premium V12.0..31101.00 업데이트 4. 파일에 제목 탭 또는 공백이 있으면 연결 결과가 표시되지 않습니다. 모든 줄은 왼쪽 가장자리에서 텍스트로 시작합니다. 또는 이외의 요소를 사용하고 있지만 중요하지는 않습니다. BTW, 빌드 "출력"VS 출력을 설정하면 ReadLinesFromFile이 대상 내에서 호출됩니다. –

관련 문제