这感觉就像它是如此简单,但我不能得到它的工作。MSBuild过滤项目文件组的条件
我试图实现的是嵌入式资源的过滤列表。我尝试了各种方法,但我似乎无法做到。
这就是我的想法是正确的解决方案:
<ItemGroup>
<AllEmbeddedResources Include="@(EmbeddedResource)" Condition="$(FullPath.Contains('Change')"/>
</ItemGroup>
编辑... 为了澄清,结果是没有条件的,该列表是所有嵌入的资源,条件,该组是空的。
我试过这个内部和外部的目标的,我试过让一个组中的完整列表,然后过滤在一个单独的组。我知道我只是误解了msbuild语法的一些基本部分,我似乎无法解决这个问题。期待显示我愚蠢的错误!
<Target Name="ListAllEmbeddedResources">
<ItemGroup>
<AllEmbeddedResources Include="@(EmbeddedResource)" Condition="$([System.String]::Copy(%(FullPath)).Contains('Change'))" />
</ItemGroup>
<Message Importance="high" Text="AllEmbeddedResources: %(AllEmbeddedResources.Identity)" />
</Target>
注意,这个语法只能目标内:
'$'用于引用属性。你想引用元数据,这是使用'%'完成的,所以对于初学者你应该'%(FullPath ...'。但是我100%肯定这个问题已经被问过了,所以只是搜索。 – stijn
@stijn所以我想同样的,但如果我使用这种语法[条件=“%(FullPath).Contains('更改')”]我得到错误[错误MSB4092:一个意外的标记“。”被发现在字符位置12 incond ition “%(FullPath).Contains('Change')”。]类似的问题已经被问到,但无论我做什么遵循他们的例子,它似乎都不够接近。尝试... – Adam
@Adam你需要在静态评估(项目全局)期间还是目标内部执行此操作?在静态评估期间很难做到这一点。 –