读取文本文件并拆分MSBuild中的每一行

读取文本文件并拆分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

我在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,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