MSBuild WriteLinesToFile最后没有新行

时间:2013-02-18 11:26:07

标签: msbuild

我想使用WriteLinesToFile在文本文件中写一个数字,但是任务是在最后放一个换行符,当我想在其他地方阅读或合并时会给我带来麻烦

示例:

<WriteLinesToFile File="$(TextFile)" Lines="@(BuildNumber)" Overwrite="true"/>

更新为用户评论

我遇到的问题是我在Property中使用了一个非常简单的命令来读取文件$([System.IO.File]::ReadAllText("$(TextFile)"))的内容,我真的想要使用这个,但它还包括换行符来自WriteLinesToFiles。我最终使用ReadLinesFromFile等类似的解决方案。

1 个答案:

答案 0 :(得分:2)

标题和说明之间略有不同。我本来希望发布这个“答案”作为编辑,但没有enough reputation points :) 您是否在文件末尾有换行符问题,或者忽略该换行符时遇到问题?你能澄清一下吗?

我认为您可以忽略该换行符的一种方式。

这段小代码将内部版本号写入文件,然后将其读出,然后将读取的数字增加1。

<Target Name="Messing_around">
  <PropertyGroup>
      <StartBuildNumber>1</StartBuildNumber>
  </PropertyGroup>
  <ItemGroup>
      <AlsoStartBuildNumber Include="1"/>
  </ItemGroup>
  <!-- Use a property 
  <WriteLinesToFile File="$(ProjectDir)test.txt" Lines="$(StartBuildNumber)" Overwrite="true"/>      
  -->
  <WriteLinesToFile File="$(ProjectDir)test.txt" Lines="@(AlsoStartBuildNumber)" Overwrite="true"/>
  <ReadLinesFromFile File="$(ProjectDir)test.txt">
      <Output
          TaskParameter="Lines"
          ItemName="BuildNumberInFile"/>
  </ReadLinesFromFile>
  <PropertyGroup>
    <OldBuildNumber>@(BuildNumberInFile)</OldBuildNumber>
    <NewBuildNumber>$([MSBuild]::Add($(OldBuildNumber), 1))</NewBuildNumber>
  </PropertyGroup>
  <Message Importance="high" Text="Stored build number: @(BuildNumberInFile)"/>
  <Message Importance="high" Text="New build number: $(NewBuildNumber)"/>
</Target>

这就是我所看到的

Output:
1>Build started xx/xx/xxxx xx:xx:xx.
1>Messing_around:
1>  Stored build number: 1
1>  New build number: 2
1>
1>Build succeeded.

如果您尝试在MSBuild任务中读取只包含带有尾随换行符的文件中的数字的单行,那么您应该没有问题。

作为旁注:根据手边的小信息,我假设BuildNumberItem中的ItemGroup。如果您只有一个内部版本号可以处理,那么Property可能是一个选项。但是,再一次,我没有修补过MSBuild太久了。因此,我愿意就Item vs Property问题提供反馈意见。