2017-09-27 4 views
3

Je tente de déployer mon site principal .net sur Azure via le menu contextuel Publier dans VS2017 et parfois (environ 1 sur 3 se déploie), j'obtiens l'erreur ci-dessous.La DLL du site semble être verrouillée par intermittence lors de la publication

La tâche de déploiement Web a échoué. (Web Deploy ne peut pas modifier le fichier 'MyCoreWebSite.dll' sur la destination car il est verrouillé par un processus externe Pour permettre la réussite de l'opération de publication, vous devrez peut-être redémarrer votre application pour libérer le verrou, ou utilisez le gestionnaire de règles AppOffline pour les applications .Net sur votre prochaine tentative publier en savoir plus sur:.. http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE)

Alors, je vais littéralement attendre une minute, essayez à nouveau et il fonctionnera. Pendant ce temps, je vais lancer l'utilitaire handle à la recherche de tout ce qui verrouille la DLL et il ne trouve jamais rien.

Est-ce un bug ou manque-t-il quelque chose de simple?

Répondre

5

Le noyau ASP.NET fait ne prend pas en charge la copie de l'ombre de fichiers, ce qui signifie que le processus ASP.NET Core (Kestrel) conservera des verrous sur ces fichiers. Vous pouvez contourner ce problème:

  1. Fournissez une page app_offline.htm avant de la publier et supprimez-la par la suite. Je pense qu'il existe un support automatisé pour cela dans le fichier de profil de publication (<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>). Mais vous pouvez le faire avec des scripts de déploiement personnalisés si vous le souhaitez. Dans ASP.NET Core 1.x, je devais également ajouter une tâche de surveillance de fichier dans le fichier Startup.cs pour arrêter le processus en cours. Je ne sais pas si c'est encore nécessaire pour ASP.NET Core 2.0.
  2. L'inconvénient avec 1. est que votre site sera hors-ligne lors de la publication. Si vous ne voulez pas que vous puissiez travailler avec une copie de votre site: copiez tous les fichiers dans un sous-répertoire (par exemple \PREVIOUS), changez la balise dans web.config afin qu'elle pointe vers le fichier .exe dans le nouveau sous-répertoire. Maintenant, tous les verrous de votre répertoire racine doivent être supprimés ... Publiez votre site et modifiez à nouveau le fichier web.config par la suite.
  3. Si votre site Web est à charge équilibrée, vous pouvez bien entendu sortir un serveur du pool, le mettre à jour et le rajouter à la piscine une fois terminé.
+2

4. Déployez-le dans un emplacement de déploiement «intermédiaire» sur Azure et, dans l'emplacement, activez l'option «Auto Swap Slots» pour l'échanger avec le site en ligne une fois qu'il est chargé. –