MsBuild条件评估属性包含

尝试创建用于文件类型为 – 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

关于扩大评估性质的建议?

据我所知,您只能使用字符串函数(如代码中的“包含”),而不适用于项目元数据.但是您尝试为%(Filename)调用Contains,而这是Content项的元数据.

要获得更多细节,请参见link to MSDN.最后一段严格说:

Property functions may not appear within metadata values. For example,
%(Compile.FullPath.Substring(0,3))
is not allowed.

但是,您可以使用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>

如果没有,您可以以任何您需要的方式修改正则表达式.

相关文章
相关标签/搜索