如何使用MSBuild搜索包含特定文本字符串的文件?
答案 0 :(得分:3)
谢谢你们!感谢您的所有快速回复! 我试过Grep,但我需要读取xml文件才能看到结果。
我刚刚发现我们可以在MSBuild扩展包中使用任务FilterByContent,它可以直接导致属性和属性。项目。如果您需要,我想将它分享给您。使用示例如下:
<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>
南。
答案 1 :(得分:1)
您可以在CodePlex上的MSBuild Contrib项目中找到“grep”任务。但是我自己没有用过它。
答案 2 :(得分:1)
目前尚不清楚是否要在名称或文件本身中搜索文本。
如果您只是想要一个文件列表,其名称与特定(简单)标准相匹配,我建议使用ItemGroup
这样:
来自MSBuild Contrib项目的Grep
tak看起来像这样
<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文件,该文件随后可用于从中读取信息并在构建过程中使用。