MsBuild条件求值属性包含

MsBuild条件求值属性包含,msbuild,Msbuild,正在尝试创建一个项目组,以便在文件类型为-Filename.CSS.ASPX的目标中使用 <Target Name="Test" AfterTargets="Build"> <Message Text="Project $(ProjectName) Test PostBuild" Importance="high" /> <Message Text="%(Content.FullPath)" Condition="%(Extension) == '.

正在尝试创建一个项目组,以便在文件类型为-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>

关于扩展属性以进行评估有什么建议吗?

据我所知,您只能对属性使用字符串函数(如
在代码中包含
),而不能对项元数据使用字符串函数。但是您试图为
%(文件名)
调用
Contains
,这是
内容
项的元数据

要了解更多详细信息,请参阅。最后一段严格地说:

属性函数不能出现在元数据值中。例如
%(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>


如果没有,您可以根据需要修改正则表达式。

在回答类似问题时,建议使用
[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>

您可能需要确保作为参数传递给属性函数的所有字符串文字都正确引用<代码>$(Property.Contains('literal'))
不是
$(Property.Contains(literal))
    <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>