我在 MSBuild 中遇到了以下问题。
我有一个文本文件(buildsolutions1.txt),其中包含列表(逐行),其中包含我需要构建的所有解决方案以及以逗号分隔的相关开发人员电子邮件:
常见\Common.sln,am@email,com
ExcGw/ExcDataService.sln,p[电子邮件受保护];am@email,com;[电子邮件受保护];[电子邮件受保护];[电子邮件受保护]
MessB/MessB/Message.sln,am@email,com
风险S/风险S2.sln,[电子邮件受保护];[电子邮件受保护];[电子邮件受保护];[电子邮件受保护];[电子邮件受保护]
我需要逐行读取此文件,编译每个解决方案,如果失败 – 向相关开发人员发送电子邮件
我的想法是创建一个项目组 Lines,其中每个项目都是该文件中的一行,并且它有 2 个元数据值:
解决方案 – 行的第一部分直到逗号
电子邮件 – 行的第二部分,从逗号到行尾
因此,我创建了一个属性组和一个目标解决方案,如下所示。
我逐行读取文件,但我不知道如何设置每个行项目的元数据:
当前行的第一部分(%(LinesFromFile.Identity))
SecondPartOfTheCurrentLine(%(LinesFromFile.Identity))
此语法不起作用:
%(LinesFromFile.Identity.Split(',')[0])
%(LinesFromFile.Identity.Split(',')[1])
也许有人知道如何正确设置元数据,或者可能有另一种方法来完成此任务。
谢谢
这是代码:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" DefaultTargets="CoreBuild">
<PropertyGroup>
<TPath>$(MSBuildProjectDirectory)\..\tools\MSBuild Extension Pack Binaries\MSBuild.ExtensionPack.tasks</TPath>
</PropertyGroup>
<Import Project="$(TPath)"/>
<PropertyGroup>
<!-- Default working folder -->
<RootFolder Condition=" '$(RootFolder)' == '' " >c:\ff\</RootFolder>
<BuildSolutionsFile >buildsolutions1.txt</BuildSolutionsFile>
<BuildSolutionsFileFullPath >$(RootFolder)$(BuildSolutionsFile)</BuildSolutionsFileFullPath>
</PropertyGroup>
<Target Name="ReadSolutions">
<Message Text=" Build solutions text file is : $(BuildSolutionsFileFullPath)" />
<!—Read the file and store each line as an item into LinesFromFile item group-->
<ReadLinesFromFile
File="$(BuildSolutionsFileFullPath)" >
<Output
TaskParameter="Lines"
ItemName="LinesFromFile"/>
</ReadLinesFromFile>
<Message Text="Current line : %(LinesFromFile.Identity)" />
<Message Text="===================================" />
<!—Create the other item group where each item is a line and has the metadata Solution and Emails -->
<ItemGroup>
<Lines Include="%(LinesFromFile.Identity)" >
<Solution>FirstPartOfTheCurrentLine(%(LinesFromFile.Identity))</Solution>
<Emails>SecondPartOfTheCurrentLine(%(LinesFromFile.Identity)) </Emails>
</Lines>
</ItemGroup>
<Message Text="All the Lines :%0A@(Lines,'%0A')" />
</Target>