我想使用WriteLinesToFile在文本文件中写一个数字,但是任务是在最后放一个换行符,当我想在其他地方阅读或合并时会给我带来麻烦
示例:
<WriteLinesToFile File="$(TextFile)" Lines="@(BuildNumber)" Overwrite="true"/>
更新为用户评论:
我遇到的问题是我在Property
中使用了一个非常简单的命令来读取文件$([System.IO.File]::ReadAllText("$(TextFile)"))
的内容,我真的想要使用这个,但它还包括换行符来自WriteLinesToFiles
。我最终使用ReadLinesFromFile
等类似的解决方案。
答案 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任务中读取只包含带有尾随换行符的文件中的数字的单行,那么您应该没有问题。
作为旁注:根据手边的小信息,我假设BuildNumber
是Item
中的ItemGroup
。如果您只有一个内部版本号可以处理,那么Property
可能是一个选项。但是,再一次,我没有修补过MSBuild太久了。因此,我愿意就Item
vs Property
问题提供反馈意见。