MSBuild在文件中查找值

MSBuild在文件中查找值,msbuild,cruisecontrol.net,Msbuild,Cruisecontrol.net,所以我用ccnet运行我的任务,我的任务创建文件。从msbuild读取文件并确定其中是否有特定值的最佳方法是什么???这取决于您的文件 多行纯文本 如果文件是这样的: Building XXX ... BUILD SUCCESSFUL Total time: 38 seconds Buildfile: file. 您可以使用ReadLinesFromFile读取文件,并使用条件检查值 <PropertyGroup> <ValueToCheck>BUILD SUCCE

所以我用ccnet运行我的任务,我的任务创建文件。从msbuild读取文件并确定其中是否有特定值的最佳方法是什么???

这取决于您的文件

多行纯文本 如果文件是这样的:

Building XXX
...
BUILD SUCCESSFUL
Total time: 38 seconds
Buildfile: file.
您可以使用
ReadLinesFromFile
读取文件,并使用
条件
检查值

<PropertyGroup>
  <ValueToCheck>BUILD SUCCESSFUL</ValueToCheck>
</PropertyGroup>

<Target Name="CheckValue">
  <ReadLinesFromFile File="@(MyTextFile)" >
    <Output TaskParameter="Lines" ItemName="Value"/>
  </ReadLinesFromFile>

  <CreateProperty Value="true"
                  Condition="'%(Value.Identity)' == '$(ValueToCheck)'">
    <Output TaskParameter="Value" PropertyName="ValueIsPresent" />
  </CreateProperty>

</Target>

建设成功
Xml文件 如果文件是Xml格式的,则可以从中使用
XmlPeek
(MSBuild 4)或
XmlRead


    • 以下是我在MSBuild 4中所做的操作。这是MSBuild的原始但原生的grep,没有模式匹配。此MSBuild项目将在文件夹(源文件夹)中查找包含字符串(string-TO-FIND)的文件(files-TO-FIND)

      解析文件后,它将打印不包含字符串的文件列表(不匹配的文件)和包含字符串的文件列表(匹配的文件)

      
      C:\MyCode
      *sln先生
      vcxproj
      @(LinesFromReadFile)
      
      什么类型的文件?纯文本还是Xml?谢谢。被接受的答案并不完全正确。
      <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
          ToolsVersion="4.0" DefaultTargets="Main">
      
      <!-- Works as-is in MSBuild 4.0.30319.1 -->
      
      <PropertyGroup>
          <SOURCE_FOLDER>C:\MyCode</SOURCE_FOLDER>
          <FILES_TO_SEARCH>*.sln</FILES_TO_SEARCH>
          <STRING_TO_FIND>vcxproj</STRING_TO_FIND>
      </PropertyGroup>
      
      <ItemGroup>
          <FILES_TO_SEARCH Include="$(SOURCE_FOLDER)\**\$(FILES_TO_SEARCH)"/>
      </ItemGroup>
      
      
      <Target Name="Main" DependsOnTargets="CheckForValue">
          <Message Text="$(FILES_TO_SEARCH) files without '$(STRING_TO_FIND)':" 
              Importance="high"/>
          <Message Text=" - %(FILES_THAT_DONT_MATCH.Identity)"/>
          <Message Text=" "/>
          <Message Text="$(FILES_TO_SEARCH) files with '$(STRING_TO_FIND)':"
              Importance="high"/>
          <Message Text=" - %(FILES_THAT_MATCH.Identity)"/>
      </Target>
      
      
      <Target Name="CheckForValue" Outputs="%(FILES_TO_SEARCH.Identity)">
      
          <ReadLinesFromFile File="%(FILES_TO_SEARCH.Identity)" >
              <Output TaskParameter="Lines" ItemName="LinesFromReadFile"/>
          </ReadLinesFromFile>
      
          <PropertyGroup>
              <FileContent>@(LinesFromReadFile)</FileContent>
          </PropertyGroup>
      
          <ItemGroup>
              <FILES_THAT_MATCH Include="%(FILES_TO_SEARCH.Identity)" 
                  Condition="$(FileContent.Contains ('$(STRING_TO_FIND)'))"/>
              <FILES_THAT_DONT_MATCH Include="%(FILES_TO_SEARCH.Identity)"
                   Condition="!$(FileContent.Contains ('$(STRING_TO_FIND)'))"/>
          </ItemGroup>
      
      </Target>
      
      </Project>