2013-04-07 47 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 – 2013-04-07 07:24:54

回答

9

這是我結束了的時候面臨着同樣的問題:

<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修改後的版本,但使用$([System.IO.File]::ReadAllText(...)代替ReadLinesFromFile任務,如在this answer建議。

+0

在VS2013它不起作用。 – 2015-05-02 10:56:49

+0

我正在使用VS2013社區,它適合我。 – 2015-05-04 11:14:07

+0

VS2013 Premium V12.0..31101.00更新4. 當文件具有標題標籤或空格時,連接的結果不會。所有行都從文本的左邊開始。我使用的其他元素不是,但不重要。順便說一句,如果我將生成輸出設置爲「診斷」VS打印ReadLinesFromFile在目標中調用。 – 2015-05-04 17:01:37

相關問題