web-dev-qa-db-fra.com

Erreur de publication d'un site ASP.NET Core 3.1 sur Azure à partir de Visual Studio 2019

J'ai une application ASP.NET Core 3. préexistante qui est déployée avec succès sur un Azure App Service (en utilisant le AspNetCoreModuleV2 module). Après la mise à niveau de l'application vers (version actuelle de) ASP.NET Core 3.1, l'application se construit et s'exécute correctement sur ma version locale de IIS Express. Lorsque j'essaie de publier sur Azure App Service en utilisant (la version d'aujourd'hui de) Visual Studio 16.4, cependant, je reçois l'erreur suivante:

Le fichier d'actifs 'C:\Project\obj\project.assets.json' n'a pas de cible pour '.NETCoreApp, Version = v3.0'. Assurez-vous que la restauration a été exécutée et que vous avez inclus "netcoreapp3.0" dans TargetFrameworks pour votre projet.

Remarques

  • Tout <PackageReference> à Microsoft.AspNetCore, Microsoft.EntityFrameworkCore, et Microsoft.Extensions a été mis à jour vers 3.1.0
  • J'ai nettoyé ma solution et même supprimé mon dossier obj pour m'assurer qu'il n'y a pas de références persistantes.
  • Cette erreur est générée à partir du 3.1.100 version de Microsoft.PackageDependencyResolution.targets.

J'obtiens que quelque chose est toujours accroché aux dépendances . NET Core 3.. Mais on ne sait pas pourquoi cela ne cause que des problèmes lors du déploiement. Azure App Service n'est-il pas encore prêt pour . NET Core 3.1? Ou est-ce un problème avec les cibles de résolution des dépendances?

9
Jeremy Caney

Le problème immédiat, tel qu'il a été identifié dans la question initiale, est lié à l'existence de deux endroits où <TargetFramework> est défini:

  1. fichier de projet (par exemple, csproj)
  2. Le profil de publication (c'est-à-dire pubxml)

Le <TargetFramework> doit être mis à jour dans les deux emplacements , et doit correspondre exactement . Sinon, la publication ne pourra pas trouver ses cibles dans le project.assets.json fichier, qui est construit sur la base du <TargetFramework> dans le fichier csjproj.

Remarque: Vous pouvez vous attendre à ce que le fichier pubxml s'en remette au <TargetFramework> défini dans le fichier csproj, mais ce n'est pas le cas .

Éditeur de texte

Pour effectuer cette modification via un éditeur de texte,

  1. Ouvrez le ~/Properties/PublishProfiles dossier.
  2. Ouvrez le *.pubxml que vous souhaitez modifier.
  3. Modifiez la valeur de <TargetFramework> à netcoreapp3.1:
<TargetFramework>netcoreapp3.1</TargetFramework>

Visual Studio 2019

Pour effectuer cette modification via Visual Studio 2019 IDE,

  1. Cliquez sur l'icône d'engrenage dans la barre d'outils Web One Click Publish (elle se trouve à droite de l'icône de publication).
  2. En supposant que le cadre cible n'est pas défini sur netcoreapp3.1, cliquez sur l'icône de modification à côté.
  3. Assurez-vous que le Framework cible est défini sur netcoreapp3.1.
  4. Cliquez sur Enregistrer .

Avertissement: Lorsque vous utilisez l'EDI, vous pouvez rencontrer un problème ici. Lors de la modification du profil, vous verrez probablement la nouvelle valeur de votre fichier de projet (c'est-à-dire netcoreapp3.1) déjà sélectionné. Lorsque vous cliquez sur Enregistrer , cependant, il reviendra à l'original valeur (par exemple, netcoreapp3.0 dans mon cas). C'est parce que vous n'avez pas réellement modifié la valeur dans l'interface, ce que Visual Studio erreur car il n'y a pas de modification de valeurs sous-jacentes . Si vous basculez temporairement une autre valeur (par exemple, Configuration ), Visual Studio reconnaîtra qu'une modification s'est produite et les deux valeurs seront mises à jour dans le *.pubxml fichier.

Merci encore à @PanagiotisKanavos de m'avoir pointé dans la bonne direction (voir commentaires sur le fil d'origine).

13
Jeremy Caney

Ouvrez le dossier du projet;

  • Accédez au dossier Propriétés >> PublishProfiles
  • Ouvrez le fichier FolderProfile.pubxml puis changez la version . en .1

    netcoreapp3.1

  • Enfin, reconstruisez votre application avant de la publier

2
Kenneth Korir

changement

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

travaille pour moi.

0
Libertad