Làm cách nào để lọc một Nhóm mục hiện có dựa trên một điều kiện cụ thể, chẳng hạn như phần mở rộng tệp hoặc siêu dữ liệu của mục?Lọc một nhóm mục hiện có để nó chỉ bao gồm các tệp phù hợp với một số điều kiện
Ví dụ này, tôi sẽ sử dụng đuôi tệp. Tôi đang cố gắng để lọc 'Không có' ItemGroup được xác định bởi VS để mục tiêu của tôi có thể hoạt động trên tất cả các tập tin của một phần mở rộng nhất định.
Ví dụ, sau đây có thể được định nghĩa:
<ItemGroup>
<None Include="..\file1.ext" />
<None Include="..\file2.ext" />
<None Include="..\file.ext2" />
<None Include="..\file.ext3" />
<None Include="..\file.ext4" />
</ItemGroup>
Tôi muốn lọc các 'Không' ItemGroup trên vì vậy nó chỉ bao gồm phần mở rộng ext
. Lưu ý rằng tôi làm không phải muốn chỉ định tất cả các tiện ích mở rộng cần loại trừ vì chúng sẽ thay đổi theo từng dự án và tôi đang cố gắng làm cho mục tiêu của tôi có thể sử dụng lại mà không sửa đổi.
Tôi đã thử thêm một Condition
trong một mục tiêu:
<Target Name="Test">
<ItemGroup>
<Filtered
Include="@(None)"
Condition="'%(Extension)' == 'ext'"
/>
</ItemGroup>
<Message Text="None: '%(None.Identity)'"/>
<Message Text="Filtered: '%(Filtered.Identity)'"/>
</Target>
Nhưng thật đáng buồn, nó không hoạt động. Tôi nhận được những điều sau đây cho kết quả:
Test:
None: '..\file1.ext'
None: '..\file2.ext'
None: '..\file.ext2'
None: '..\file.ext3'
None: '..\file.ext4'
Filtered: ''
Tôi tin rằng% (Tiện ích mở rộng) cần phải là '.ext' –
'% (Extension)' nên được mở rộng đến phần mở rộng của mục trong '@ (None)' đang được kiểm tra, cái mà tôi muốn so với 'ext', phần mở rộng đích. –
Tôi có nghĩa là nó cần phải được '.ext', như trong với một dấu chấm như char đầu tiên, hoạt động tốt sau đó. –