使用MSBuild,我该如何将属性设置为文件的内容?

8
我有一个文件,在PowerShell中设置了我的构建版本号。 我需要在MSBuild中获取它,以便在我的构建脚本中进行操作。 这似乎很简单; 我只想取文件的内容并将属性设置为该值。
我认为可能可以使用Exec任务,对我的文件执行“more”操作,并捕获标准输出来完成此操作,但是我似乎无法使其工作。 其他人似乎也遇到了stdout和MSBuild的问题。这是我尝试过的内容:
<Exec Command="more $(BuildDirectory)\version.txt" Outputs="stdout">
    <Output TaskParameter="Outputs" ItemName="BuildNumber" />
</Exec>
1个回答

9

使用ReadLinesFromFile任务可以满足您的需求。

<ReadLinesFromFile File="Version.Txt">
    <Output TaskParameter="Lines" ItemName="BuildNumber"/>
</ReadLinesFromFile>

说了那么多,实现问题所示的另一种方法是将构建编号信息存储在带有 MSBuild 模式的 XML 文件中。大致像这样:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <PropertyGroup>
   <BuildNumber>10</BuildNumber>
   <RevNumber>5</RevNumber>
 </PropertyGroup>
</Project>

然后将version.properties文件导入您的主msbuild文件中


1
谢谢!我找不到那个任务。另外,你第一个代码片段中有一个轻微的bug,它是ItemName而不是Item:<ReadLinesFromFile File="$(BuildDirectory)\version.txt"> <Output TaskParameter="Lines" ItemName="BuildNumber" /> </ReadLinesFromFile> 然后,我可以使用“@(BuildNumber)”访问输出。 - Kirk Liemohn
哦,现在我需要从列表项(@)更改为属性($)。对此有什么技巧吗? - Kirk Liemohn
1
我想我弄清楚了: <CreateProperty Value="@(BuildNumber)"> <Output TaskParameter="Value" PropertyName="BuildNumberValue" /> </CreateProperty> - Kirk Liemohn
Output 元素中使用 PropertyName 属性,直接在 ReadLinesFromFile 任务中创建一个属性。 - tm1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接