尝试创建用于文件类型为的目标的项组 - 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>
Run Code Online (Sandbox Code Playgroud)
关于编译;
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
Run Code Online (Sandbox Code Playgroud)
有关扩大评估属性的建议吗?
VHa*_*avy 32
据我所知,您可以Contains仅对属性使用字符串函数(如在代码中),而不是对项目元数据使用.但是你试图调用Containsfor %(Filename),这是Contentitem 的元数据.
要获取更多详细信息,请参阅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>
Run Code Online (Sandbox Code Playgroud)
如果没有,您可以以任何方式修改正则表达式.
回答类似的问题在MSBuild中,我可以在MetaData项目上使用String.Replace函数吗?建议使用[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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10743 次 |
| 最近记录: |