สำหรับผู้ที่มีปัญหาในการใช้คำตอบของ Chrisนี่คือโซลูชันสำหรับ Visual Studio 2012 และใหม่กว่า:
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
ดังที่คริสกล่าวไว้ในคำตอบของเขา - Visual Studio จะไม่แตะต้อง<Target>
ส่วนนี้แม้ว่าคุณจะเล่นซอ (เพิ่ม / ลบไฟล์) ด้วยตัวเองด้วยไดเร็กทอรีเป้าหมาย
โปรดทราบว่าคุณควรรวมไดเร็กทอรีย่อยที่มีไฟล์อยู่ (ในกรณีด้านบนคือimages
) Visual Studio / MSBuild จะวางไฟล์เหล่านั้นไว้ในไดเร็กทอรีเดียวกันภายในโครงสร้างโปรเจ็กต์ หากคุณไม่ใช้ไดเร็กทอรีย่อยไฟล์จะถูกวางไว้ที่รูทของโครงสร้างโปรเจ็กต์
สำหรับคำอธิบายโดยย่อของสัญลักษณ์แทน:
**
หมายถึงทุกอย่างแบบวนซ้ำ (ไฟล์ไดเร็กทอรีย่อยและไฟล์ภายในไฟล์เหล่านั้น)
*.ext
จะรวมไฟล์ทั้งหมดที่มีนามสกุลext
ไว้ในไดเร็กทอรีระดับบนสุด แต่ไม่ใช่ไดเร็กทอรีย่อย
- ยกตัวอย่างเช่น
*.ext
อาจจะ*.png
, *.js
ฯลฯใด ๆนามสกุลไฟล์จะทำงาน
**\*.ext
จะรวมไฟล์ทั้งหมดที่มีนามสกุลext
จากไดเร็กทอรีระดับบนสุดและไดเร็กทอรีย่อยทั้งหมด
- ดูคำตอบได้จากฉันจะใช้รูปแบบการตั้งชื่อ Nant / Ant ได้อย่างไร? สำหรับคำอธิบายที่สมบูรณ์ยิ่งขึ้นพร้อมตัวอย่าง
เพื่อให้เสร็จสมบูรณ์โปรดทราบว่ามีความแตกต่างระหว่างการใช้<Target>
และไม่ใช้
ด้วย<Target>
วิธีการนี้ Visual Studio จะไม่แสดงไฟล์ภายใน Solution Explorer
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
<Target>
วิธีการที่ไม่ใช่จะสั่งให้ Visual Studio แสดงไฟล์ภายใน Solution Explorer ข้อเสียเปรียบของสิ่งนี้คือการจัดการไดเร็กทอรีอัตโนมัติใด ๆจะทำให้ Visual Studio แทนที่รายการสัญลักษณ์แทน มันก็ควรจะตั้งข้อสังเกตว่าวิธีการดังต่อไปนี้จะเพียงปรับปรุง Explorer โซลูชันเมื่อเปิดโครงการโซลูชั่น / ใน VS. แม้แต่ปุ่มแถบเครื่องมือ "รีเฟรช" ของ Solution Explorer ก็ยังไม่ทำ
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>