這感覺就像它是如此簡單,但我不能得到它的工作。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你需要在靜態評估(項目全局)期間還是目標內部執行此操作?在靜態評估期間很難做到這一點。 –