Как искать файлы, содержащие определенную текстовую строку? - PullRequest
0 голосов
/ 29 марта 2010

Как искать файлы, содержащие определенную текстовую строку, используя MSBuild?

Ответы [ 3 ]

3 голосов
/ 29 марта 2010

Спасибо, ребята! Я ценю все ваши быстрые ответы! Я пробовал Grep, но мне нужно прочитать XML-файл, чтобы увидеть результат.

Я только что узнал, что мы можем использовать задачу FilterByContent в пакете расширений MSBuild, которая дает нам прямой результат в свойствах и элементах. Я хотел бы поделиться им с вами на случай, если вам это понадобится. Пример использования приведен ниже:

<Target Name="ttt">
  <ItemGroup>
    <files Include="d:\temp\test\**" />
  </ItemGroup>
  <MSBuild.ExtensionPack.FileSystem.File TaskAction="FilterByContent" RegexPattern="abbcc" Files="@(files)" >
    <Output TaskParameter="IncludedFileCount" PropertyName="out"/>
  </MSBuild.ExtensionPack.FileSystem.File>
  <Message Text="ttt:$(out)" />
</Target>

Nam.

1 голос
/ 29 марта 2010

Не ясно, хотите ли вы искать текст по имени или по самому файлу.

Если вы просто хотите получить список файлов, имена которых соответствуют определенным (простым) критериям, я бы предложил использовать ItemGroup следующим образом:

Таксы Grep из проекта MSBuild Contrib будут выглядеть так:

<PropertyGroup>
  <MSBuildContribCommonTasksAssembly>$(MSBuildExtensionsPath)\MSBuildContrib\MSBuildContrib.Tasks.dll</MSBuildContribCommonTasksAssembly>
</PropertyGroup>

<UsingTask TaskName="MSBuildContrib.Tasks.Grep" AssemblyFile="$(MSBuildContribCommonTasksAssembly)" Condition="Exists('$(MSBuildContribCommonTasksAssembly)')" />

<ItemGroup>
   <FilesToSearch Include="**\*.cs" />
</ItemGroup>

<!-- very simple search -->
<Grep InputFiles="@(FilesToSearch )" OutputFile="out.xml" Pattern="Error" />

<!-- slightly more complicated search (search and extract info) -->
<Grep InputFiles="@(FilesToSearch )" 
  OutputFile="out.xml" 
  Pattern="// (?'Type'TODO|UNDONE|HACK): (\[(?'Author'\w*),(?'Date'.*)\])? (?'Text'[^\n\r]*)"  />

Задача Grep создаст файл out.xml, который впоследствии можно будет использовать для считывания информации из него и использования в процессе сборки.

1 голос
/ 29 марта 2010

Вы можете найти задачу "grep" в проекте MSBuild Contrib на CodePlex. Хотя сам этим не пользовался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...