O Publish Web do Visual Studio 2012 não copia arquivos


229

Eu tenho um projeto de aplicativo Web no VS 2012 e, quando uso a ferramenta de publicação na Web, ela é criada com êxito, mas não copia nenhum arquivo para o destino de publicação (neste caso, sistema de arquivos).

Se eu olhar para a saída da compilação, posso ver que tudo é copiado para obj \ Release \ Package \ PackageTmp \ corretamente, mas tudo o que vejo na saída da compilação é o seguinte:

4> Projeto de construção concluído "{Project} .csproj".
4> Excluindo arquivos existentes ...
4> Publicando pasta / ...
4> ========== Compilação: 3 bem-sucedidas, 0 com falha, 1 atualizada, 0 ignorada ===== =====
========== Publicação: 1 bem-sucedida, 0 com falha, 0 ignorada ==========

Embora diga que a publicação foi bem-sucedida, não há arquivos no diretório de destino da publicação.

Eu já vi isso em vários projetos e, às vezes, parece que as configurações da solução / plataforma causam esse problema, mas não consegui identificar uma causa exata para isso.

Alguém mais viu isso acontecer ou tem uma idéia de como fazer isso funcionar corretamente?

ATUALIZAR:

Eu posso ter encontrado uma solução alternativa para isso. Acabei de fazer isso acontecer de novo e estava mexendo nas configurações de publicação. Depois que mudei a Configuração selecionada na guia Configurações para outra configuração e depois para a que eu queria usar todos os meus arquivos, comecei a publicar novamente. Espero que isso funcione em outros projetos no futuro.

ATUALIZAÇÃO 2:

Publiquei um bug no Microsoft Connect e recebi uma resposta de um desenvolvedor da equipe do VS Web Developer. Ele disse que eles corrigiram esse problema em suas compilações internas e lançarão uma atualização para a ferramenta de publicação em breve, que corrigirá esse problema.

ATUALIZAÇÃO 3:

Isso foi corrigido recentemente com o Visual Studio 2012 Update 2


1
Isso é estranho. Se você vir a pasta Publishing / ..., ela deverá funcionar corretamente. Eu sugiro que você verifique com o seu caminho. Verifique se você está olhando para o lugar certo.
Maxisam 30/08

14
Isso aconteceu comigo no Windows 8 com o Visual Studio 2012. Acabei de criar um novo perfil de publicação e funciona! Provavelmente um bug no VS 2012.: /
T.Ho 31/08

3
Eu tive o mesmo problema. Excluir e recriar o perfil de publicação fez o truque para mim.
Tommy Jakobsen

3
Excluir e recriar perfis fez o truque para mim.
Michael Wells

3
Isso não foi corrigido no Visual Studio Update 2, nem no Update 3. Verifique a resposta mais popular após a "resposta aceita" (que não é a solução). Apenas edite o perfil e, na guia "Configurações", selecione a configuração correta na lista (se a versão for boa, selecione debug, salve, edite novamente e selecione release). Salve e publique.
firepol

Respostas:


78

Isso pode ser causado por soluções / projetos criados com o RC do vs2012. Isso aconteceu comigo meses atrás e corrigiu o problema, certificando-se de que minhas configurações de compilação da solução correspondessem às configurações do meu projeto ...

Recentemente, experimentei o mesmo problema ao abrir a mesma solução criada originalmente no vs2012RC com o VS2012 Express for Web. Fiz exatamente o que o pôster original sugeria e resolveu o meu problema.

Aqui está o tópico que me levou à resposta:

connect.microsoft.com/VisualStudio/feedback/details/746321/publish-web-application-fails

A resposta pertinente da conversa acima que me ajudou foi:

Postado pela Microsoft em 13/06/2012 às 12:00 Oi Andrew,

Este foi um erro na maneira como lidamos com a configuração da solução versus a configuração do projeto. Assumimos incorretamente que eles seriam os mesmos (por exemplo, a Versão da solução | x86 também teria cada projeto definido para a Versão | x86), o que nos levou a usar as propriedades de compilação incorretas para publicar arquivos.

A solução alternativa é fazer a configuração da solução e compilar a configuração. Este problema será corrigido na próxima versão do Visual Studio 2012.

Obrigado, - Jimmy Lewis SDET, equipe Visual Web Developer


8
Esse problema ocorre para mim em um novo projeto do Visual Studio 2012. Ele publicou em FTP no passado, mas agora, quando tento publicar, faz exatamente como acima - ele finge, diz que foi bem-sucedido e não empurra nada. Ele cria a saída no diretório obj, mas na verdade nunca a copia para o servidor. O truque de configuração de mudança corrige isso.
Chris Moschini

12
Ei! Ainda está quebrado no SP2!

6
Acabei de ter o mesmo problema e percebi que era porque as configurações de publicação são padronizadas como "Qualquer CPU", mas minha solução está definida como "x86". Alterar as configurações na publicação para x86 corrigiu o problema.
21713 Sam

Nenhuma das soluções acima funciona para mim. Excluindo perfis e recriando, alterando a configuração e retornando, reiniciando o VS, reconstruindo tudo, etc. Criei uma nova exibição no meu aplicativo. Está lá. Eu posso ver isso. Quando corro localmente, ele é exibido. Quando publico, não está lá. Eu tenho a atualização 4.
Robert

A única coisa que funciona para mim é excluir minha visão do projeto e adicioná-la novamente. Parece acordar o IDE com a noção de que há algo novo aqui. Portanto, onde quer que o VS rastreie adições e subtrações de projetos, pode estar envolvido.
Robert

104

Mesmo problema. A solução alternativa foi alterar as configurações de publicação de Release para Debug. Publique novamente e volte para Liberar ...


SIM! Essa é a boa resposta. No meu caso, não uso os perfis "Release" ou "Debug" padrão, mas "DEV", "STAGE" e "LIVE". Vi que, por exemplo, para STAGE, em um computador colega que baixou minha solução via TFS, o perfil foi definido incorretamente como "Liberar" (o mesmo para todos os outros perfis). Então, eu simplesmente tive que corrigi-lo e apontar para "STAGE" (ou DEV / LIVE para os outros). A publicação funcionou. Obrigado.
Firepol # 24/13

Funcionou como um encanto. Este deve ser a resposta aceita.
Aycan Yaşıt

39

Para levar isso um pouco mais longe. Você tem dois arquivos que são criados quando você cria um perfil de publicação.

  • NewProfile.pubxml
  • NewProfile.pubxml.user

Quando você abre um projeto que possui esses arquivos na pasta PublishProfile a partir de um controle de origem, ele possui apenas o .pubxmlarquivo e não o .publxml.userarquivo; portanto, ele cria o .publxml.userarquivo rapidamente quando você abre o projeto. Quando ele cria o novo .publxml.userem tempo real, o xml se parece com:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

Quando você cria um novo perfil, ele cria um xml parecido com:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <TimeStampOfAssociatedLegacyPublishXmlFile />
    <EncryptedPassword />
  </PropertyGroup>
</Project>

Se você pegar o <PropertyGroup>nó e o colocar no .pubxml.userarquivo, seus PublishProfiles começarão a funcionar novamente.


5
+1 Isso pareceu para mim. Isso torna um pouco mais fácil se você abrir os dois arquivos e compará-los após criar um novo perfil. Também descobri que os dois arquivos precisavam ser verificados no controle de origem se estivessem trabalhando em equipe.
Re

@ Deano O problema com o check-in de qualquer arquivo * .user é que você não tem mais a capacidade de personalizar projetos individuais (locais). O objetivo do arquivo do usuário é permitir que membros individuais da equipe tenham suas próprias configurações locais.
Dave Riedl

Existe alguma outra solução em vez de adicionar o arquivo ".pubxml.user" ao controle de origem?
Ubikuity 18/03/2013

Nós não comprometer arquivos .user * no controle de origem, mas aliás, não usamos o perfil de publicação dentro do Visual Studio, como o nosso processo de servidor de integração e construção contínua administra tudo isso ...
Brett Rigby

21

Uma solução fácil é excluir seu perfil de publicação e criar um novo.

quando você clica com o botão direito na sua solução e seleciona publicar, você tem um perfil definido. exclua isso e crie um novo.

isso vai consertar.

Eu tive esse problema ao mudar de 2010 para 2012


Isso funciona para mim, o que faço foi excluir os perfis na máquina local e recriá-los. Isso não afeta as outras máquinas de desenvolvimento.
Jean Jimenez

Eu tive esse problema comutação projeto de vs2013 para vs2012 e este fixa completamente o problema
NikiUsefi

Isso funcionou para mim. Eu usei essas etapas para reconstruir a minha (sistema de arquivos) perfil de publicação: stackoverflow.com/a/20616521/381082
DeveloperDan

9

Eu tive o mesmo erro e alterei a configuração de release para depuração e o problema foi resolvido.


8

Eu tive esse mesmo problema, no entanto, nenhuma das respostas neste tópico funcionou para mim. Meu problema foi que existe um diretório que contém arquivos HTML estáticos gerados dinamicamente (pelo meu aplicativo). O diretório inteiro não estava sendo publicado.

A solução que funcionou para mim foi encontrada aqui :

Um problema que voltei há um tempo e achei que deveria documentar era que certos tipos de arquivo não estavam sendo carregados quando publiquei meu projeto.

Os tipos de arquivo em questão eram arquivos .pdf e .rtf.

O motivo disso ocorreu porque essas extensões de arquivo não foram reconhecidas como exigindo publicação pelo Visual Studio. Felizmente, isso pode ser alterado no Visual Studio.

Selecione os arquivos que não estão sendo copiados. Em Propriedades, verifique se Build Action está definido como Content .

Se isso não funcionar, pode-se tentar o seguinte.

No menu Project, selecione Package / Publish Web e observe esta lista suspensa:

insira a descrição da imagem aqui

Tente alterar isso para Todos os arquivos nesta pasta do projeto.


Isso funcionou para a minha situação - quando apenas alguns arquivos foram publicados.
precisa saber é o seguinte

Isso funcionou apenas porque os arquivos não foram incluídos no projeto corretamente. Veja esta resposta a seguir para a causa raiz e solução: stackoverflow.com/a/40721544/3520070
AndrewRalon

Qual resposta abaixo você quer dizer?
Tomas Kubes

7

Isso ocorre porque o .pubxml.user contém as informações necessárias para publicação e esse arquivo não é (e não deve) ser incluído no controle de origem. Para corrigir esse bug do VS, copie as informações do arquivo .pubxml.user para o arquivo .pubxml. As propriedades relevantes são:

<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>

Coloque-os no seu .pubxml e você deve estar pronto.


7

Eu tentei todas essas soluções, mas essa é a que sempre funciona.

Apenas alteramos o "Método de publicação:" de "Sistema de arquivos" para, por exemplo, "Implantação da Web" e imediatamente o alteramos novamente para "Sistema de arquivos".


Sim, foi isso que finalmente funcionou para mim também (tentei todas as outras sugestões acima). Isto é com vs2010
Karen

5

Eu tenho o mesmo problema em vários projetos. Os únicos atingidos parecem ser projetos da web. Excluir e recriar o perfil resolve o problema apenas uma vez. Além disso, a comparação do publishxml gerado não gera diferenças, portanto, ele não parece relacionado ao perfil.

A solução alternativa mencionada pelo OP para alterar problemas de compilação é a única solução confiável no momento.


A mesma solução alternativa foi a única correção para mim também. Para esclarecer, as etapas: Compilar> Publicar. Escolha a guia Configurações à esquerda. Altere a configuração da compilação para qualquer outra coisa. Você verá que agora existe um asterisco (*) ao lado do nome do perfil de publicação - isso é um sinal de que o bug foi frustrado. Mude a configuração de compilação de volta para o que você queria. Continue com a publicação normalmente. Fixo.
Chris Moschini

4

Encontrei o mesmo problema no VS 2010, depois de verificar a saída de publicação, os logs de eventos, ativar e verificar os logs do visual studio etc. Decidi então remover a publicação na Web (via adicionar / remover) que acredito ter sido atualizada recentemente para a v1. 0,30810,0. Isso resolveu o problema.


2
Tivemos esse problema, parecia estar relacionado ao arquivo pubxml.user na pasta PublishProfiles em Meu projeto - o meu tinha uma lista de arquivos gerados por máquina para publicar, embora a documentação diga que esse arquivo é apenas para configurações específicas para mim ( e, portanto, não é colocado no controle de origem). Consegui publicar tudo bem. Meu colega tirou uma cópia nova do nosso código-fonte e não pôde publicar - quando o arquivo pubxml.user foi gerado, nenhum arquivo foi listado. Desinstalamos a publicação na web atualizada e tudo está bem novamente.
Nick

4

Aqui tivemos o mesmo problema.

Apenas alteramos o "Método de publicação:" de "Sistema de arquivos" para, por exemplo, "Implantação da Web" e imediatamente o alteramos novamente para "Sistema de arquivos".


isto deve estar no topo #
JoeBrockhaus 27/12

Agora isso foi corrigido com a Atualização 3 do Visual Studio 2012
KoalaBear 31/01

4

O seguinte funcionou para mim:

Simplesmente mude de Release> Debug> Release (ou vice-versa) e publique.

Não há necessidade de excluir, editar, publicar qualquer coisa que você não precise.


4

Meu problema estava na configuração incorreta do arquivo myproject.csproj. O arquivo '_address-step1-stored.cshtml' não foi copiado na publicação. 'Nenhum' mudou para 'Conteúdo', agora está tudo bem. insira a descrição da imagem aqui


Foi isso! O projeto tinha muitos arquivos que foram verificados no controle de origem, mas foram marcados como Noneno arquivo .csproj ou estavam completamente ausentes do projeto (lá, mas não "usados")! Esta totalmente explica porque rodando localmente sempre trabalhou, mas a publicação nunca o fez. : D
AndrewRalon

3

Mesmo problema com o VS 2012 Pro com um destino de publicação em disco. Projeto usado para publicar corretamente, mas começou a executar esse problema em que falhava ao copiar os arquivos para a pasta de destino.

A solução foi editar o perfil de publicação, alterar o modo de Versão (Qualquer CPU) para depurar e voltar para Versão (Qualquer CPU). Isso faz com que o arquivo PublishProfiles \ projname.pubxml.user seja reescrito (conforme descrito acima). Parece que foram adicionados os elementos LastUsedBuild, LastUsedPlatform e TimeStampOfAssociatedLegacyPublishXmlFile no nó propertygroup. Após a conclusão da publicação, ele adiciona outro ItemGroup com arquivos individuais e horários de publicação.


1

Esta ação foi bem sucedida para mim:

Mate os perfis de publicação em "Propriedades> Perfis de publicação> xxxx.pubxml" e redefina novamente.


1

Pelo que vale a pena, eu finalmente desisti de brigar com o Web Deploy para fazer o que eu queria (copiar arquivos implantáveis ​​e nada mais), então eu o escrevi no PowerShell e estou realmente feliz com o resultado. É muito mais rápido do que qualquer coisa que eu tentei no MSBuild / Web Publish, presumivelmente porque esses métodos ainda estavam fazendo coisas que eu não precisava.

Aqui está a essência ( literalmente ):

function copy-deployable-web-files($proj_path, $deploy_dir) {
  # copy files where Build Action = "Content" 
  $proj_dir = split-path -parent $proj_path
  [xml]$xml = get-content $proj_path
  $xml.Project.ItemGroup | % { $_.Content } | % { $_.Include } | ? { $_ } | % {
    $from = "$proj_dir\$_"
    $to = split-path -parent "$deploy_dir\$_"
    if (!(test-path $to)) { md $to }
    cp $from $to
  }

  # copy everything in bin
  cp "$proj_dir\bin" $deploy_dir -recurse
}

No meu caso, estou chamando isso em um ambiente de IC (TeamCity), mas também poderia ser facilmente conectado a um evento pós-compilação.


1

Eu descobri que eu poderia solucionar esse problema alterando o local de destino de obj / [release | stage | ..] para um novo caminho fora das pastas da solução completamente, por exemplo, c: \ deployment. Parece que o VS 2012 estava ficando confuso e talvez desistindo de algum lugar durante o processo de publicação.

Matt


1

Recentemente, tive o mesmo problema no VS 2013 para um projeto MVC no qual importei o Umbraco CMS. Não pude publicar. A resposta acima ajudou, embora eu precisasse de um tempo para descobrir o que realmente deveria fazer no VS. Precisava de alguma pesquisa, por exemplo, nos blogs da MS para descobrir. Eu tento dizer simples:

  • Escolha na barra de ferramentas do VS uma determinada configuração, por exemplo, Release e Qualquer CPU. Execute o projeto.
  • Depois, clique com o botão direito do mouse no Gerenciador de Soluções na solução em questão, escolha Publicar. Crie um novo perfil de publicação ou use um determinado, mas sempre certifique-se de que nas configurações seja escolhida a mesma configuração (por exemplo, Versão e Qualquer CPU), como antes de executar o projeto pela última vez.
  • Além disso, no meu caso, foi necessário excluir a pasta OBJ, porque aqui as configurações das minhas últimas tentativas malsucedidas de publicação ficaram bloqueadas, embora eu tenha reiniciado o VS e excluído todos os perfis de publicação.

0

Eu tenho um aplicativo Web com vários outros projetos mencionados na solução. Implantei com sucesso uma única configuração de publicação várias vezes no passado. Alterei a configuração do projeto de depuração para lançamento de um projeto que havia sido perdido no passado. Na próxima vez que tentei implantar, tive esses sintomas, onde o Publish falha silenciosamente - ele não faz nada e diz que conseguiu:

1>------ Build started: Project: Project, Configuration: DeployProduction Any CPU ------
1>  
2>Publishing folder /...
========== Build: 1 succeeded, 0 failed, 9 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

A única maneira de recuperá-lo era apagar o perfil de publicação, fechar o Visual Studio para forçá-lo a salvar a exclusão, reabri-lo e recriar o perfil de publicação do zero. Uma vez que eu fiz isso, eu poderia publicar bem novamente.

Win8 VS2012, laptop de baixa qualidade.


0

No Visual Studio 2012, a alternância entre versões ainda causa problemas.

Adicionamos um evento de pré-compilação para excluir a objpasta: del /s /f /q $(ProjectDir)\obje isso corrigiu o problema de publicação. A limpeza funciona algumas vezes, mas nem sempre.


0

Finalmente encontrei a resposta sozinho. Todas as soluções acima não funcionam para mim.

O que eu tinha feito é que eu movo o projeto para o drive c altere a pasta do projeto para algo mais curto e aumente a publicação.

A razão pela qual ele falhou do meu lado é que eu tinha um nome / projeto muito longo de hierarquia.

C: \ Usuários \ usuário \ Desktop \ Sistema de gerenciamento de conformidade \ ComplianceIssueManagementSystem \ ComplianceIssueManagementSystem

Eu tinha pensado nisso porque, às vezes, quando extraí o arquivo rar, ele diz que o nome / caminho é muito longo. Eu pensei que seria o mesmo que o visual studio 2012 publish. e faz!

espero que ajude vocês.


0

Verifique no seu projeto atual se você fez uma cópia posterior com o mesmo nome de classe e nome de página diferente (o nome da classe herdará o arquivo copiado). Em última análise, isso irá confundir o compilador !!!

CodeFile = "Consolidated.aspx.vb" Inherits = "Consolidado


0

Nenhuma das soluções acima funcionou para mim.

Mas notei que, dos cinco projetos do ASP.NET MVC em nossa solução principal, quatro deles colocaram o pacote de implantação no lugar certo, enquanto um o deixou em obj \ Debug.

Comparei os projetos e encontrei uma discrepância. A solução foi mudar isso :

<Import
    Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

para isso :

<Import
  Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets"
  Condition="'$(VSToolsPath)' != ''" />
<Import
  Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets"
  Condition="false" />

Depois que eu fiz essa alteração, todos os cinco projetos colocaram seus pacotes de implantação no lugar certo.

(Desculpe pelas longas filas, mas não consegui encontrar uma maneira melhor de condensá-las.)


Estou enfrentando uma situação onde um arquivo ou dois parece passar despercebidos e não publicado no servidor, mas, meu arquivo .vbproj já tem tanto do <Import> elementos que você sugere
bkwdesign

0

Encontrei isso com os arquivos de referência de serviço gerados pelo Visual Studio, tornando-se muito longos em termos do comprimento geral do caminho.

Encurtou-os gerando novamente a Referência de Serviço usando svcutil.exe, excluindo todos os arquivos originais de Referência de Serviço.

svcutil pode ser chamado assim:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe" /language:CS http://myservice /namespace:*,My.Namespace

My.Namespace deve ser substituído pelo espaço para nome existente no proxy de serviço gerado (normalmente encontrado no arquivo Reference.cs) para evitar erros de compilação.

http://myservice deve ser substituído pelo URL do terminal em serviço.


0

Eu já entrei no mesmo problema. Nenhuma das soluções acima funcionou para mim.

Excluí os arquivos que não foram copiados durante a publicação.


0

Eu publiquei o site várias vezes. Mas um dia, quando modifiquei um arquivo aspx e tentei publicar o site, ele resultou em uma pasta publicada vazia.

Na minha solução alternativa, encontrei uma solução.

  1. O assistente de publicação refletirá qualquer erro durante a publicação, mas não copiará nenhum arquivo para a pasta de destino.

  2. Para descobrir o arquivo que gera o erro, copie o conteúdo da pasta do site para uma nova pasta e inicie o visual studio com esse site.

  3. Agora, quando você tenta publicar, ele fornece o nome do arquivo que contém erros.

  4. Basta corrigir o erro na pasta original do site e tentar publicar, ele funcionará como antes.


0

Siga estas etapas para resolver:

Build > Publish > Profile > New

Crie um novo perfil e configure-o com as mesmas configurações do seu perfil existente.

O projeto agora será publicado corretamente. Isso geralmente ocorre como resultado de um perfil de publicação controlado por fonte de outra máquina criada em uma versão mais recente do Visual Studio.


0

CORRIGIDO - várias soluções oferecidas não funcionaram para mim. O que funcionou para mim no VS Community 2017, o Windows Server 2012 R2, foi alterar as variáveis ​​de ambiente TEMP e TMP para o usuário e, em seguida, reiniciar o sistema e implantar novamente (reiniciar o VS não foi suficiente). Essas variáveis ​​temporárias são onde o VS publica temporariamente.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Reiniciar o visual studio após alterar as variáveis ​​temporárias não funcionou, teve que reiniciar o sistema.


-1

Primeiro:

  • Configuração de lançamento da versão.
  • Em Propriedades do projeto-> página, selecione Todos os arquivos e pastas em Package / Publish Web.
  • Reconstrua a solução (após a solução limpa).
  • agora publique.

Ao publicar, verifique novamente o que você optou.
Isso deve servir. Fez por mim! :)


-2

O mais fácil é,

   1. select the file(s) that are not being copied,
   2. Press <F4> to get the properties window
   3. Make the "Build Action" property "compile" or "content" depending on what it is.
   4. Now this particular file will be included!
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.