Для тех, у кого есть проблемы с использованием ответа Криса , это решение для 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 не будет отображать файлы в обозревателе решений.
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
Непостоянство <Target>
подход будет инструктировать Visual Studio , чтобы показать файлы в обозревателе решений. Недостатком этого является то, что любые манипуляции с автоматическими каталогами заставят Visual Studio переопределить запись с подстановочными знаками. Следует также отметить , что подход ниже будет только обновить в Solution Explorer при открытии Solution / Проект в VS. Даже кнопка панели инструментов «Обновить» в обозревателе решений не сделает этого.
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>