读取文本文件并拆分MSBuild中的每一行
我在MSBuild中遇到了以下问题。 我有一个文本文件(buildsolutions1.txt),包含列表(逐行),其中包含我需要构建的所有解决方案以及相关开发人员的电子邮件(以逗号分隔): Common\Common.sln,am@email,com读取文本文件并拆分MSBuild中的每一行,msbuild,split,readfile,Msbuild,Split,Readfile,我在MSBuild中遇到了以下问题。 我有一个文本文件(buildsolutions1.txt),包含列表(逐行),其中包含我需要构建的所有解决方案以及相关开发人员的电子邮件(以逗号分隔): Common\Common.sln,am@email,com ExcGw/EXCDASERVICE.sln,pm@email.com;am@email,com;jk@email.com;mk@email.com;Ppp@email.com MessB/MessB/Message.sln,am@email,c
ExcGw/EXCDASERVICE.sln,pm@email.com;am@email,com;jk@email.com;mk@email.com;Ppp@email.com
MessB/MessB/Message.sln,am@email,com 风险/风险2.sln,jp@email.com;mz@email.com;mk@email.com;jk@email.com;ps@email.com 我需要逐行阅读此文件,编译每个解决方案,如果失败,请向相关开发人员发送电子邮件 我的想法是创建一个项目组行,其中每个项目都是此文件中的一行,它有2个元数据值: 解决方案–行的第一部分,直到逗号 电子邮件–从逗号到行尾的第二部分 所以我创建了一个属性Grroup和一个目标ReadSolutions,如下所示 我逐行阅读文件,但不知道如何为每行项目设置元数据:
当前行的第一部分(%(LinesFromFile.Identity))
当前行的第二部分(%(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>
$(MSBuildProjectDirectory)\..\tools\MSBuild扩展包二进制文件\MSBuild.ExtensionPack.tasks
c:\ff\
buildsolutions1.txt
$(根文件夹)$(构建解决方案文件)
当前行的第一部分(%(LinesFromFile.Identity))
当前行的第二部分(%(LinesFromFile.Identity))
以下是我处理的数据:
Common\Common.sln,am@email,com
ExcGw/ExcDataService.sln,pm@email.com;am@email,com;jk@email.com;mk@email.com;Ppp@email.com
MessB/MessB/Message.sln,am@email,com
RiskS/RiskS2.sln,jp@email.com;mz@email.com;mk@email.com;jk@email.com;ps@email.com
稍微修改示例,以包含第四个解决方案的换行符
以下是修改后的代码:
<ItemGroup>
<Lines Include="@(LinesFromFile)" >
<Solution>$([System.String]::Copy('%(LinesFromFile.Identity)').Split(',')[0])</Solution>
<Emails>$([System.String]::Copy('%(LinesFromFile.Identity)').Split(',')[1])</Emails>
</Lines>
</ItemGroup>
<Message Text="Solutions to Emails-> %(Lines.Solution) -> %(Lines.Emails)" />
你是生命的救世主,非常感谢!!!我不会在一年内像这样计算出来:-)。所以诀窍是将项目值复制到属性中,然后将其拆分。是的。我曾尝试使用substring,但您还必须嵌套上述调用以设置索引,这是非常不可读的:)
Solutions to Emails-> Common\Common.sln -> am@email
Solutions to Emails-> ExcGw/ExcDataService.sln -> pm@email.com;am@email
Solutions to Emails-> MessB/MessB/Message.sln -> am@email
Solutions to Emails-> RiskS/RiskS2.sln -> jp@email.com;mz@email.com;mk@email.com;jk@email.com;ps@email.com