2013-04-07 10 views
10

Sto provando a concatenare alcuni file durante la mia compilazione ma il modo in cui ho provato elimina le schede e gli spazi lasciando l'output non formattato.Come concatenare i file in MSBuild e conservare schede e spazi

<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" /> 

Qual è il modo per preservare la formattazione?

+2

Questa domanda può aiutare/spiegare: http://stackoverflow.com/questions/272518/msbuild-readlinesfromfile-all-text-on-one-line –

risposta

9

Questo è quello che ho finito con di fronte lo stesso problema:

<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> 

Si tratta di una versione modificata del this blog post ma utilizzando $([System.IO.File]::ReadAllText(...) al posto del compito ReadLinesFromFile, come suggerito in this answer.

+0

In VS2013 non funziona. –

+0

Sto usando la Community VS2013 e funziona per me. –

+0

VS2013 Premium V12.0..31101.00 Aggiornamento 4. Quando il file ha intestazioni di schede o spazi, il risultato concatenato no. Tutte le linee iniziano dal bordo sinistro con il testo. Uso elementi diversi da o , ma non è importante. BTW, se imposto l'output di build su "Diagnostics" VS stampa che ReadLinesFromFile viene richiamato all'interno della destinazione. –