No momento, estou tentando usar a funcionalidade 'Publicar' e MSDeploy do Visual Studio 2010 para lidar com minhas necessidades de implantação da web, mas encontrei um obstáculo com relação à personalização do pacote, dependendo da minha configuração de compilação.
Eu desenvolvo em um ambiente de 32 bits, mas preciso criar um pacote de lançamento para um ambiente de 64 bits, portanto, na configuração 'Release', tenho um evento de pós-construção que copia a versão de 64 bits de uma dll de terceiros para o diretório bin substituindo a versão de 32 bits . Quando eu uso a funcionalidade 'Publicar', mesmo que a dll de 64 bits correta esteja sendo copiada para o diretório bin, ela não é incluída no pacote.
Existe uma maneira de 'Publicar' incluir arquivos que foram copiados para o diretório bin durante um evento pós-compilação?
Respostas:
Eu respondi a uma pergunta semelhante, mas diferente em Como você inclui arquivos adicionais usando os pacotes de implantação da web VS2010? .
Em seu cenário, você está usando o evento pós-compilação, eu recomendaria descartar o evento pós-compilação e implementar suas ações usando seus próprios destinos MSBuild em vez do evento pós-compilação. Abaixo você encontrará o texto da outra resposta.
De: Como você inclui arquivos adicionais usando os pacotes de implantação da web VS2010?
Ótima pergunta. Acabei de postar uma entrada de blog muito detalhada sobre isso em Web Deployment Tool (MSDeploy): Build Package incluindo arquivos extras ou excluindo arquivos específicos .
Aqui está a sinopse. Depois de incluir os arquivos, mostrarei como excluí-los também.
Incluindo Arquivos Extra
Incluir arquivos extras no pacote é um pouco mais difícil, mas ainda não é nada demais se você estiver familiarizado com o MSBuild e, se não estiver, leia isto. Para fazer isso, precisamos nos conectar com a parte do processo que coleta os arquivos para empacotamento. O destino que precisamos estender é chamado CopyAllFilesToSingleFolder. Este destino tem uma propriedade de dependência, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, que podemos acessar e injetar nosso próprio destino. Portanto, vamos criar um destino chamado CustomCollectFiles e injetá-lo no processo. Conseguimos isso com o seguinte (lembre-se depois da instrução import).
Isso adicionará nosso alvo ao processo, agora precisamos definir o próprio alvo. Vamos supor que você tenha uma pasta chamada Arquivos extras 1 nível acima do seu projeto da web. Você deseja incluir todos esses arquivos. Aqui está o destino CustomCollectFiles e discutiremos depois disso.
Aqui o que fiz foi criar o item _CustomFiles e no atributo Incluir disse a ele para pegar todos os arquivos daquela pasta e qualquer pasta abaixo dela. Então eu uso este 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 DestinationRelativePath dos metadados. Isso determinará o caminho relativo em que será colocado na embalagem. Eu usei a instrução Extra Files% (RecursiveDir)% (Filename)% (Extension) aqui. O que isso significa é colocá-lo no mesmo local relativo no pacote em que está na pasta Extra Files.
Excluindo arquivos
Se você abrir o arquivo de projeto de um aplicativo da Web criado com o VS 2010 na parte inferior, encontrará uma linha com.
BTW, você pode abrir o arquivo de projeto dentro do VS. Clique com o botão direito do mouse no projeto e selecione Unload Project. Em seguida, clique com o botão direito do mouse no projeto descarregado e selecione Editar Projeto.
Essa declaração incluirá todas as metas e tarefas de que precisamos. A maioria de nossas personalizações devem ser posteriores a essa importação, se você não tiver certeza, coloque-as depois! Portanto, se você tiver arquivos para excluir, há um nome de item, ExcludeFromPackageFiles, que pode ser usado para isso. Por exemplo, digamos que você tenha um arquivo denominado Sample.Debug.js que está incluído em seu aplicativo da web, mas deseja que esse arquivo seja excluído dos pacotes criados. Você pode colocar o snippet abaixo após a declaração de importação.
Ao declarar o preenchimento deste item, os arquivos serão excluídos automaticamente. Observe o uso dos metadados FromTarget aqui. Não vou entrar nisso aqui, mas você deve saber sempre especificar isso.
fonte
Eu encontrei uma solução alternativa para o problema usando o
ExcludeFilesFromDeployment
elemento dentro do arquivo de projeto. Tive a ideia do Web Deployment: Excluindo arquivos e pastasPortanto, se você precisar empacotar os arquivos do projeto conforme eles existem no diretório do projeto após uma construção bem-sucedida e as etapas de pós-construção associadas, faça o seguinte.
selecione os Itens a serem implantados como "Todos os arquivos nesta pasta do projeto"
PropertyGroup
elemento associado à definição de configuração, por exemplo, "Release"Dentro do
PropertyGroup
elemento, adicione os seguintes elementos e exclua arquivos e pastas que você não quer no pacoteSalve e recarregue seu projeto
Isso resolve meu problema por enquanto, mas se houver uma solução melhor, por favor me avise, já que isso não é ideal devido ao hackery envolvido, mas talvez este seja um cenário de implantação incomum?
fonte
Selecione seus arquivos ou pastas e altere a ação Build como Conteúdo da janela Propriedades.
fonte
Eu sei que é uma pergunta antiga, mas nada disso funcionou para mim.
Em 2017 VS eu apenas cliquei com o botão direito na pasta extra a ser publicada e selecione publicar que funcionou.
Exemplo:
fonte
Adicionar a pasta bin (e seu conteúdo) ao projeto fez com que os arquivos fossem copiados para o diretório de saída de publicação.
Para mim, meu problema era que eu precisava colocar um arquivo de licença de software proprietário no bin / pasta, mas não queria copiá-lo manualmente a cada implantação.
Isso estava usando o Visual Studio 2015 Professional
fonte
Sei que esta é uma conversa antiga, mas me deparei com ela enquanto tentava fazer a mesma coisa e achei que seria útil acrescentar o que encontrei aqui.
Quase todos os artigos sobre a inclusão de arquivos extras em sua publicação usam este método de adicionar os itens
CopyAllFilesToSingleFolderForPackageDependsOn
ouCopyAllFilesToSingleFolderForMSDeployDependsOn
noPropertyGroup
e todos eles dizem algo como "Eu adicionei isso ao final do arquivo ..."Foi o que fiz e passei uma tarde tentando descobrir por que nada estava acontecendo, até que percebi que já havia uma
PropertyGroup
seção no topo do arquivo. Quando eu coloquei meuCopyAllFilesToSingleFolderForPackageDependsOn
nessa seção funcionou bem.Espero que isso economize o tempo de alguém algum dia
fonte