4

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

例子:

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

更新为以下用户评论

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

4

1 回答 1

3

标题和描述之间有轻微的脱节。我本来希望将此“答案”作为编辑发布,但没有足够的声誉点:) 您是否对文件末尾的换行符有问题,或者您是否有忽略该换行符的问题?你能澄清一下吗?

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

这段代码将构建号写入文件,然后将其读出,然后将读取的数字加 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 了。因此,我愿意接受有关ItemvsProperty问题的反馈。

于 2013-02-22T20:26:52.307 回答