如何连接MSBuild中的文件并保留选项卡和空格

par*_*ent 11 msbuild msbuild-task

我正在尝试在构建期间连接几个文件,但是我尝试的方式剥离了标签和空格,使输出无格式化.

<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" />
Run Code Online (Sandbox Code Playgroud)

保留格式的方法是什么?

And*_*tad 11

这是我在遇到同样问题时最终得到的结果:

<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>
Run Code Online (Sandbox Code Playgroud)

这是此博客文章的修改版本,但使用此答案中的建议$([System.IO.File]::ReadAllText(...)而不是ReadLinesFromFile任务.