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

10

J'ai une application ASP.NET Core 3.0 préexistante qui est déployée avec succès sur un Azure App Service (à l'aide du AspNetCoreModuleV2module). Après la mise à niveau de l'application vers (version d'aujourd'hui) ASP.NET Core 3.1 , l'application se construit et s'exécute correctement sur ma version locale d' IIS Express . Lorsque j'essaie de publier sur Azure App Service à l'aide de (la version actuelle 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>« s à Microsoft.AspNetCore, Microsoft.EntityFrameworkCoreet Microsoft.Extensionsont été mis à jour3.1.0
  • J'ai nettoyé ma solution et même supprimé mon objdossier pour m'assurer qu'il n'y a pas de références persistantes.
  • Cette erreur est générée à partir de la 3.1.100version de Microsoft.PackageDependencyResolution.targets.

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

Jeremy Caney
la source
Merci @Panagiotis Kanavos d'avoir marqué cela avec asp.net-core-3.1. Je n'avais pas la réputation nécessaire pour créer un nouveau tag.
Jeremy Caney
De toute évidence, ma prochaine étape sera de commencer avec un nouveau modèle de projet ASP.NET Core 3.1 , de tenter de déployer sur un nouveau service Azure App , puis de réintroduire les dépendances jusqu'à ce que je puisse reproduire le problème. Je n'aurai pas le temps de le faire avant la fin de la semaine. Jusque-là, j'espérais que quelqu'un d'autre pourrait avoir un aperçu de ce type d'erreur ou trouver lui-même une solution.
Jeremy Caney
Les documents montrent comment sélectionner explicitement la version du SDK .NET Core . As-tu essayé ça? Le SDK 3.1 apparaît-il dans la liste?
Panagiotis Kanavos
@PanagiotisKanavos: ce projet n'est pas encore publié à l'aide d' Azure Pipelines . Cela dit, cela ne me rappelle qu'il ya aussi un <TargetFramework>paramètre dans le pubxmlprofil que Visual Studio repose sur, que j'espacés sur. Oops! Changer cela pour netcoreapp3.1correspondre à la csprojcible résout le problème immédiat. (Cela introduit un nouveau problème avec Azure App Service lui-même déclenchant sur la cible, mais qui peut probablement être résolu en utilisant un déploiement autonome, similaire au lien que vous avez fourni.) Merci de m'avoir pointé dans la bonne direction!
Jeremy Caney
1
Eh bien, merci d'avoir trouvé cette question (et sa réponse). Je commence à être assez frustré d'adopter des modifications de pointe de la SEP (sur leur recommandation et encouragement) pour continuer à rencontrer des problèmes comme celui-ci.
Frank

Réponses:

14

Le problème immédiat, tel qu'il a été identifié dans la question initiale, concerne le fait qu'il y a deux endroits où <TargetFramework>se situe:

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

Le <TargetFramework>doit être mis à jour dans deux emplacements et doivent correspondre exactement . Sinon, la publication ne pourra pas trouver ses cibles dans le project.assets.jsonfichier, qui est construit en fonction de <TargetFramework>dans le csjprojfichier.

Remarque: vous pouvez vous attendre à ce que le pubxmlfichier diffère de l' <TargetFramework>ensemble du csprojfichier, mais ce n'est pas le cas.

Éditeur de texte

Pour effectuer cette modification via un éditeur de texte,

  1. Ouvrez le ~/Properties/PublishProfilesdossier.
  2. Ouvrez le que *.pubxmlvous souhaitez modifier.
  3. Modifiez la valeur de <TargetFramework>ànetcoreapp3.1 :
<TargetFramework>netcoreapp3.1</TargetFramework>

Visual Studio 2019

Pour effectuer cette modification via le IDE de Visual Studio 2019 ,

  1. Cliquez sur l'icône d'engrenage sur le barre d'outils de publication Web One Click (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 cadre cible est défini sur netcoreapp3.1.
  4. Cliquez sur Enregistrer .

Avertissement: lorsque vous utilisez l'IDE, 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-à-direnetcoreapp3.1) déjà sélectionnée. Cependant, lorsque vous cliquez sur Enregistrer , il reviendra à lavaleur d' origine (par exemple,netcoreapp3.0dans mon cas). Cela est dû au fait que vous n'avez pas réellement modifié la valeur dans l'interface, ce que Visual Studio confond avec l'absence de modification desvaleurs 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).

Jeremy Caney
la source
Merci d'avoir publié une solution! Je me débattais avec ça quand j'ai essayé de publier hier soir et ça n'avait aucun sens. Dans l'assistant de publication, 3.1 avait toujours été sélectionné comme cible, donc j'ai pensé que c'était ok, mais une fois que j'ai ouvert le pubxfichier comme vous l'avez expliqué, il était toujours sur 3.0. Très frustrant. Honnêtement, je n'ai eu que des bugs et des problèmes d'arrêt étranges, obscurs et complètement complets depuis la sortie de VS 16.3 et .NET Core 3.0. Merci encore!
Gup3rSuR4c
Idk si vous obtenez cela aussi, mais il est très agréable de savoir comment lorsque vous lui dites de publier en tant que dépendant du framework, il décide de publier l'intégralité du framework avec lui. Une publication qui devrait
durer environ
Pour info: depuis que j'ai publié cela à l'origine, Microsoft a mis à jour Azure App Services pour fournir une prise en charge native de .NET Core 3.1 . Cela dit, j'ai supprimé l'avertissement concernant le HTTP Error 500.30 - ANCM In-Process Start Failuremessage de mon message d'origine. Auparavant, cela nécessitait la publication d'une distribution entièrement autonome de votre application. (Cela dit, il y a généralement un décalage de 2 à 3 jours entre la suppression d' une nouvelle version de .NET Core et son intégration dans l' environnement Azure App Service , il est donc utile d'en être informé dans les futures mises à jour.)
Jeremy Caney
1
Bien, j'avais seulement mis à jour la version du framework dans les propriétés du projet et je n'ai même pas pensé au fichier .pubxml. Cela provoquait le blocage de ma publication, après la mise à jour du .pubxml vers "netcoreapp3.1", cela a bien fonctionné. Merci
demoncodemonkey
2

Ouvrir le dossier du projet;

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

    netcoreapp3.1

  • Enfin, reconstruisez votre application avant de la publier

Kenneth Korir
la source
Bon appel à fournir des instructions explicites pour modifier le pubxmlfichier manuellement, et surtout compte tenu de la maladresse de modifier ces valeurs via l' interface graphique de Visual Studio 2019 . J'ai intégré ces détails dans ma réponse d'origine, cette option est donc explicitement expliquée. Je vous remercie!
Jeremy Caney
0

changement

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

travaille pour moi.

Libertad
la source
1
Pour ASP.NET Core 3.1 , toutes les Microsoft.AspNetCorebibliothèques doivent être mises à jour 3.1.0conformément aux notes de publication de Microsoft v3.1. Votre approche peut être un correctif valide pour des problèmes similaires dans ASP.NET Core 2.2 , en supposant que l'erreur n'a pas été causée par une incompatibilité entre vos fichiers csprojet pubx, comme c'était le cas dans mon cas.
Jeremy Caney,
La version des deux packages mentionnés ci-dessus est actuellement en 2.2.0 et marquée comme dernière version.
Libertad
1
@Libertad, vous devez mettre à niveau votre installation de Visual Studio vers la version 16.4.0 pour voir la dernière version de dot net core 3.1
navule
@navule my VS est à jour. Les paquets ci-dessus ne sont que des paquets nuget. Jetez un oeil à ceci: nuget.org/packages/Microsoft.AspNetCore et voir sa dernière version
Libertad