MSBuild在文件中查找值
所以我用ccnet运行我的任务,我的任务创建文件。从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
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>