尝试创建一个用于文件类型为的目标的项目组 - Filename.CSS.ASPX
<Target Name="Test" AfterTargets="Build">
<Message Text="Project $(ProjectName) Test PostBuild" Importance="high" />
<Message Text="%(Content.FullPath)" Condition="%(Extension) == '.aspx' AND %(Filename.Contains(css))" Importance="high" />
</Target>
编译;
Error 1 Expected "%(Filename.Contains(css))" to evaluate to a boolean instead of "%(Filename.Contains(css))", in condition "%(Extension) == '.aspx' AND % (Filename.Contains(css))". C:\Projects\TestProj\TestProj\TestProj.csproj 58 38 TestProj
有关扩展评估属性的建议吗?
答案 0 :(得分:30)
据我所知,您可以在属性中使用字符串函数(例如代码中的Contains
),而不是项元数据。但您尝试为Contains
调用%(Filename)
,这是Content
项的元数据。
要了解更多详情,请参阅link to MSDN。最后一段严格说:
属性函数可能不会出现在元数据值中。例如,
%(Compile.FullPath.Substring(0,3))
是不允许的。
但是,您可以使用Regex
类的静态方法。我相信以下代码是您想要的:
<Target Name="Test" AfterTargets="Build">
<Message Text="Project $(ProjectName) Test PostBuild" Importance="high" />
<Message Text="%(Content.FullPath)" Condition=" $([System.Text.RegularExpressions.Regex]::IsMatch('%(FullPath)', '.+\.css\.aspx')) " Importance="high" />
</Target>
如果没有,您可以以任何方式修改正则表达式。
答案 1 :(得分:6)
回答类似问题In MSBuild, can I use the String.Replace function on a MetaData item?建议使用[System.String]::Copy()
作为解决方法来访问非静态System.String
方法。
因此代码可以重写为:
<Target Name="Test" AfterTargets="Build">
<Message Text="Project $(ProjectName) Test PostBuild" Importance="high" />
<Message Text="%(Content.FullPath)" Condition="%(Content.Extension) == '.aspx' AND $([System.String]::Copy(%(Content.Filename)).Contains('css'))" Importance="high" />
</Target>