2013-04-07 12 views
10

Ich versuche, ein paar Dateien während meines Builds zu verketten, aber die Art, wie ich versuchte, streichen die Tabs und Leerzeichen die Ausgabe unformatiert lassen.Wie Dateien in MSBuild verketten und Registerkarten und Leerzeichen beibehalten

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

Wie erhalten Sie die Formatierung?

+2

Diese Frage kann helfen/erklären: http://stackoverflow.com/questions/272518/msbuild-readlinesfromfile-all-text-on-one-line –

Antwort

9

Dies ist, was ich mit endete, wenn sie mit dem gleichen Problem konfrontiert:

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

Dies ist eine modifizierte Version von this blog post aber $([System.IO.File]::ReadAllText(...) anstelle der ReadLinesFromFile Aufgabe verwendet wird, wie in this answer vorgeschlagen.

+0

In VS2013 funktioniert es nicht. –

+0

Ich benutze VS2013 Community und es funktioniert für mich. –

+0

VS2013 Premium V12.0..31101.00 Update 4. Wenn die Datei über Tabulatoren oder Leerzeichen verfügt, funktioniert das verkettete Ergebnis nicht. Alle Zeilen beginnen am linken Rand mit Text. Ich verwende andere Elemente als oder , ist aber nicht wichtig. BTW, wenn ich Build-Ausgabe auf "Diagnostics" VS setzt, druckt, dass ReadLinesFromFile innerhalb des Ziels aufgerufen wird. –

Verwandte Themen