Varolan bir ItemGroup'ı dosya uzantısı veya öğenin meta verileri gibi belirli bir duruma göre nasıl filtrelersiniz?Varolan bir öğe grubunu filtreleyerek yalnızca bazı koşullarla eşleşen dosyaları içerir
Bu örnekte, dosya uzantısını kullanacağım. Hedefimin tüm bir uzantıdaki tüm dosyalar üzerinde çalışabilmesi için VS tarafından tanımlanan 'None' ItemGroup'u filtrelemeye çalışıyorum.
Örneğin, aşağıdaki şekilde tanımlanabilmektedir:
<ItemGroup>
<None Include="..\file1.ext" />
<None Include="..\file2.ext" />
<None Include="..\file.ext2" />
<None Include="..\file.ext3" />
<None Include="..\file.ext4" />
</ItemGroup>
bunun sadece ext
uzantısını içerir, böylece 'Hiçbiri' yukarıda ItemGroup filtre istiyoruz. numaralı'u hariç tuttuğum tüm uzantıları belirtmek istediğimi unutmayın, çünkü bunlar projeye göre değişecektir ve hedefimi değiştirmeden yeniden kullanılabilir hale getirmeye çalışıyorum.
<Target Name="Test">
<ItemGroup>
<Filtered
Include="@(None)"
Condition="'%(Extension)' == 'ext'"
/>
</ItemGroup>
<Message Text="None: '%(None.Identity)'"/>
<Message Text="Filtered: '%(Filtered.Identity)'"/>
</Target>
Ama ne yazık ki, bu çalışmaz:
Bir hedef dahilindeki bir Condition
ekleyerek denedim. Ben çıkış için aşağıdaki olsun: gelişmiş filtreleme için
Test:
None: '..\file1.ext'
None: '..\file2.ext'
None: '..\file.ext2'
None: '..\file.ext3'
None: '..\file.ext4'
Filtered: ''
% (Uzantı) '.ext' olması gerektiğine inanıyorum –
'% (Extension)', '@ (None) 'içindeki öğenin uzantısına genişletilmeli ve hedef uzantı olan' ext 'ile karşılaştırmak istediğim şeydir. –
Yani kelimenin tam anlamıyla ilk char olarak bir nokta ile olduğu gibi '.ext' olması gerekiyor, o zaman iyi çalışıyor. –