Para aqueles que têm problemas para usar a resposta de Chris , esta é a solução para o Visual Studio 2012 e mais recente:
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
Como Chris mencionou em sua resposta - o Visual Studio não tocará nesta <Target>
seção, mesmo se você mexer manualmente (adicionando / removendo arquivos) com o diretório de destino.
Observe que você deve incluir um subdiretório onde os arquivos estão localizados (no caso acima, é images
). O Visual Studio / MSBuild colocará esses arquivos no mesmo diretório dentro da estrutura do projeto. Se você não usar um subdiretório, os arquivos serão colocados na raiz da estrutura do projeto.
Para uma explicação rápida dos curingas:
**
significa tudo recursivamente (arquivos, subdiretórios e arquivos dentro deles)
*.ext
irá incluir todos os arquivos com extensão ext
dentro do diretório de nível superior, mas não subdiretórios
- Por exemplo,
*.ext
poderia ser *.png
, *.js
etc. Qualquer extensão de arquivo irá funcionar
**\*.ext
incluirá todos os arquivos com extensão ext
do diretório de nível superior e todos os subdiretórios.
- Veja a resposta em Como uso os padrões de nomenclatura Nant / Ant? para uma explicação mais completa com exemplos.
Para completar, observe que há uma diferença entre usá-lo <Target>
e não usá-lo.
Com a <Target>
abordagem, o Visual Studio não mostrará os arquivos no Solution Explorer.
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
A não <Target>
abordagem irá instruir o Visual Studio para mostrar os arquivos dentro do Solution Explorer. A desvantagem desse aqui é que qualquer manipulação dos diretórios automáticos fará com que o Visual Studio substitua a entrada curinga. Também deve ser observado que a abordagem abaixo só atualizará o Gerenciador de Soluções ao abrir a Solução / Projeto no VS. Mesmo o botão "atualizar" da barra de ferramentas do Solution Explorer não fará isso.
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>