2013-04-07 4 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 Update 4. ファイルに見出しのタブまたはスペースがある場合、連結結果は表示されません。すべての行はテキストの左端から始まります。私はまたは以外の要素を使用していますが、重要ではありません。ところで、ビルド出力を "Diagnostics"に設定すると、VS内でReadLinesFromFileが呼び出されます。 –

関連する問題