Erro ao publicar um site ASP.NET Core 3.1 no Azure no Visual Studio 2019

10

Eu tenho um aplicativo ASP.NET Core 3.0 preexistente, implantado com êxito em um Serviço de Aplicativo do Azure (usando o AspNetCoreModuleV2módulo). Depois de atualizar o aplicativo para (versão de hoje do) ASP.NET Core 3.1 , o aplicativo cria e executa corretamente na minha versão local do IIS Express . Quando tento publicar no Serviço de Aplicativo do Azure usando (versão de hoje do) Visual Studio 16.4 , no entanto, recebo o seguinte erro:

O arquivo de ativos 'C: \ Project \ obj \ project.assets.json' não tem um destino para '.NETCoreApp, Versão = v3.0'. Verifique se a restauração foi executada e se você incluiu 'netcoreapp3.0' no TargetFrameworks do seu projeto.

Notas

  • Tudo <PackageReference>é para Microsoft.AspNetCore, Microsoft.EntityFrameworkCoree Microsoft.Extensionsforam atualizados para3.1.0
  • Limpei minha solução e até coloquei uma nuked na minha objpasta para garantir que não haja referências remanescentes.
  • Este erro está sendo gerado a partir da 3.1.100versão de Microsoft.PackageDependencyResolution.targets.

Percebo que algo ainda está pendurado nas dependências do .NET Core 3.0 . Mas não está claro por que isso está causando problemas apenas durante a implantação. O Serviço de Aplicativo do Azure ainda não está pronto para o .NET Core 3.1 ? Ou isso é um problema com os objetivos de resolução de dependências?

Jeremy Caney
fonte
Obrigado @Panagiotis Kanavos por marcar isso com asp.net-core-3.1. Eu não tinha a reputação necessária para criar uma nova tag.
Jeremy Caney
Obviamente, minha próxima etapa será começar com um novo modelo de projeto do ASP.NET Core 3.1 , tentar implantar em um novo serviço de Aplicativo do Azure e reintroduzir dependências até que eu consiga reproduzir o problema. Não terei tempo para fazer isso até o final desta semana. Até então, eu esperava que outra pessoa tivesse alguma ideia desse tipo de erro ou que tivesse encontrado uma solução.
Jeremy Caney
Os documentos mostram como selecionar explicitamente a versão do .NET Core SDK . Você já tentou isso? O SDK 3.1 aparece na lista?
Panagiotis Kanavos
@PanagiotisKanavos: este projeto ainda não foi publicado usando os Pipelines do Azure . Dito isto, este não me lembrar que há também uma <TargetFramework>configuração no pubxmlperfil que Visual Studio conta com, que eu espaçadas por diante. Opa! Alterar isso para netcoreapp3.1corresponder ao csprojdestino resolve o problema imediato. (Isso introduz um novo problema com o próprio Serviço de Aplicativo do Azure disparando no destino, mas isso provavelmente pode ser resolvido usando uma implantação independente, semelhante ao link que você forneceu.) Obrigado por me indicar a direção certa!
Jeremy Caney
11
Bem, graças a Deus por encontrar esta pergunta (e resposta). Estou começando a ficar bastante frustrado com a adoção de mudanças de ponta em MS (por recomendação e incentivo) apenas para continuar enfrentando problemas como esse.
30519 Frank

Respostas:

14

A questão imediata - como identificada na pergunta original - tem a ver com a existência de dois lugares onde <TargetFramework>está definido:

  1. O arquivo do projeto (por exemplo, csproj)
  2. O perfil de publicação (ou seja, pubxml)

Eles <TargetFramework>devem ser atualizados nos dois locais e devem corresponder exatamente . Caso contrário, a publicação não será capaz de encontrar seus alvos no project.assets.jsonarquivo, que é construído com base no <TargetFramework>no csjprojarquivo.

Nota: Você pode esperar que opubxmlarquivo seja adiado para o<TargetFramework>conjunto nocsprojarquivo, mas esse não éo caso.

Editor de texto

Para fazer essa modificação através de um editor de texto,

  1. Abra a ~/Properties/PublishProfilespasta
  2. Abra o que *.pubxmlvocê deseja editar.
  3. Modifique o valor de <TargetFramework>para netcoreapp3.1:
<TargetFramework>netcoreapp3.1</TargetFramework>

Visual Studio 2019

Para fazer essa modificação através do IDE do Visual Studio 2019 ,

  1. Clique no ícone de roda dentada na barra de ferramentas do Web One Click Publish (fica à direita do ícone de publicação).
  2. Supondo que o Target Framework não esteja definido como netcoreapp3.1, clique no ícone de edição ao lado dele.
  3. Verifique se o Target Framework está definido como netcoreapp3.1.
  4. Clique em Save .

Aviso: Ao usar o IDE, você pode encontrar um problema aqui. Ao editar o perfil, você provavelmente verá o novo valor do seu arquivo de projeto (ou seja,netcoreapp3.1) já selecionado. Quando você clicar em Salvar , no entanto, ele voltará aovalor original (por exemplo,netcoreapp3.0no meu caso). Isso ocorre porque você realmente não alterou o valor na interface, o que o Visual Studio confunde por não haver uma alteração nosvalores subjacentes . Se você alternar temporariamente outro valor (por exemplo, Configuração ), o Visual Studio reconhecerá que ocorreu uma alteração e os dois valores serão atualizados no*.pubxmlarquivo.

Mais uma vez, obrigado a @PanagiotisKanavos por me indicar a direção certa (ver comentários no tópico original).

Jeremy Caney
fonte
Obrigado por postar uma solução! Eu estava lutando com isso quando tentei publicar ontem à noite e isso simplesmente não fazia sentido. No assistente de publicação, sempre havia 3.1 selecionado como destino, então achei que estava ok, mas depois que abri o pubxarquivo, como você explicou, ele ainda estava no 3.0. Muito frustrante. Honestamente, não tive nada além de bugs e problemas estranhos, obscuros e completamente parados, desde que o VS 16.3 e o .NET Core 3.0 foram lançados. Obrigado novamente!
Gup3rSuR4c
Idk, se você está recebendo isso também, mas é adorável como quando você diz para publicar como dependente da estrutura, decide publicar toda a estrutura junto com ela. Uma publicação que deve ter mais ou menos 1 minuto, agora tem mais de 15 minutos ... #
Gup3rSuR4c
FYI: Desde que eu postei isso originalmente, a Microsoft atualizou os Serviços de Aplicativo do Azure para fornecer suporte nativo ao .NET Core 3.1 . Dado isso, removi o aviso referente à HTTP Error 500.30 - ANCM In-Process Start Failuremensagem da minha mensagem original. Anteriormente, isso exigia a publicação de uma distribuição totalmente independente do seu aplicativo. (Dito isso, geralmente há um intervalo de 2 a 3 dias entre uma nova versão do .NET Core cair e ser integrada ao ambiente do Serviço de Aplicativo do Azure , portanto, é útil estar ciente em futuras atualizações.)
Jeremy Caney
11
Bom, eu havia atualizado apenas a versão do framework nas propriedades do projeto e nem sequer me passou pela cabeça o arquivo .pubxml. Isso estava causando a minha publicação travar, depois de atualizar o .pubxml para "netcoreapp3.1", funcionou bem. Obrigado
demoncodemonkey
2

Abra a pasta Projeto;

  • Navegue para a pasta Propriedades >> PublishProfiles
  • Abra o arquivo FolderProfile.pubxml e altere a versão 3.0 para 3.1

    netcoreapp3.1

  • Por fim, reconstrua seu aplicativo antes de publicar

Kenneth Korir
fonte
Boa chamada ao fornecer instruções explícitas para modificar o pubxmlarquivo manualmente, e especialmente considerando a idiotice de modificar esses valores por meio da GUI do Visual Studio 2019 . Incorporei esses detalhes à minha resposta original, para que esta opção seja explicada explicitamente. Obrigado!
Jeremy Caney
0

mudança

<PackageReferenceInclude="Microsoft.AspNetCore"Version="2.2.0" />
 to 
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />

funciona para mim.

Libertad
fonte
11
Para o ASP.NET Core 3.1 , todas as Microsoft.AspNetCorebibliotecas devem ser atualizadas 3.1.0, conforme as notas de versão da Microsoft v3.1. Sua abordagem pode ser uma correção válida para problemas semelhantes no ASP.NET Core 2.2 , supondo que o erro não tenha sido causado por uma incompatibilidade entre você csproje os pubxarquivos, como no meu caso.
Jeremy Caney
A versão dos dois pacotes mencionados acima está atualmente na 2.2.0 e marcada como versão mais recente.
Libertad
11
@ Libertad, você precisa atualizar sua instalação do visual studio para a versão 16.4.0 para ver a versão mais recente do dot net core 3.1
navule
@navule meu VS está atualizado. Pacotes acima são apenas pacotes de pepitas. Dê uma olhada no seguinte: nuget.org/packages/Microsoft.AspNetCore e veja sua versão mais recente
Libertad