Ótima pergunta. Acabei de publicar uma entrada de blog muito detalhada sobre isso na Web Deployment Tool (MSDeploy): Build Package incluindo arquivos extras ou excluindo arquivos específicos .
Aqui está a sinopse. Depois de incluir os arquivos, mostro como excluir os arquivos também.
Incluindo arquivos extras
Incluir arquivos extras no pacote é um pouco mais difícil, mas ainda não é demais, se você se sentir confortável com o MSBuild e, se não estiver, leia isso. Para fazer isso, precisamos nos conectar à parte do processo que coleta os arquivos para empacotamento. O destino que precisamos estender é chamado CopyAllFilesToSingleFolder. Esse destino possui uma propriedade de dependência, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, na qual podemos acessar e injetar nosso próprio destino. Portanto, criaremos um destino chamado CustomCollectFiles e o injetaremos no processo. Conseguimos isso com o seguinte (lembre-se após a declaração de importação).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Isso adicionará nosso objetivo ao processo, agora precisamos definir o próprio objetivo. Vamos supor que você tenha uma pasta chamada Arquivos Extra que fica 1 nível acima do seu projeto da web. Você deseja incluir todos esses arquivos. Aqui está o destino CustomCollectFiles e discutiremos depois disso.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Aqui, o que eu fiz foi criar o item _CustomFiles e, no atributo Include, disse para ele pegar todos os arquivos nessa pasta e qualquer pasta abaixo dele. Se por acaso você precisar excluir algo dessa lista, adicione um Exclude
atributo a _CustomFiles
.
Então eu uso esse item para preencher o item FilesForPackagingFromProject. Este é o item que o MSDeploy realmente usa para adicionar arquivos extras. Observe também que declarei o valor de destino de metadados DestinationRelativePath. Isso determinará o caminho relativo que será colocado no pacote. Usei a instrução Extra Files% (RecursiveDir)% (Filename)% (Extension) aqui. O que está dizendo é colocá-lo no mesmo local relativo no pacote, na pasta Arquivos Extra.
Excluindo arquivos
Se você abrir o arquivo do projeto de um aplicativo Web criado com o VS 2010 na parte inferior, encontrará uma linha com.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW, você pode abrir o arquivo do projeto dentro do VS. Clique com o botão direito do mouse no projeto e escolha Unload Project. Em seguida, clique com o botão direito do mouse no projeto descarregado e selecione Editar Projeto.
Esta declaração incluirá todos os objetivos e tarefas que precisamos. A maioria de nossas personalizações deve ser posterior a essa importação, se você não tiver certeza se será depois! Portanto, se você tiver arquivos para excluir, existe um nome de item, ExcludeFromPackageFiles, que pode ser usado para fazer isso. Por exemplo, digamos que você tenha o arquivo Sample.Debug.xml, incluído no seu aplicativo da Web, mas deseje que esse arquivo seja excluído dos pacotes criados. Você pode colocar o snippet abaixo após a declaração de importação.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Ao declarar preencher esse item, os arquivos serão automaticamente excluídos. Observe o uso dos FromTarget
metadados aqui. Não vou abordar isso aqui, mas você deve saber sempre especificar isso.