VS2013 publier le site Web de tâches de déploiement a échoué Le fichier est en cours d'utilisation
Je suis à l'aide de VS2013 Premium pour publier un site à Windows Server 2012.
Tous les fichiers de publier ok sauf ceux-ci:
SqlServerTypes\x64\msvcr100.dll
SqlServerTypes\x64\SqlServerSpatial110.dll
SqlServerTypes\x86\msvcr100.dll
SqlServerTypes\x86\SqlServerSpatial110.dll
- Je obtenir ce genre d'erreurs pour chacun des fichiers ci-dessus, j'ai essayé de publier:
Web de tâches de déploiement a échoué. (Le fichier 'msvcr100.dll' est en cours d'utilisation. Pour en savoir plus: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE.)
Interrestingly, ces fichiers ont été publiés la première fois (quand ils n'étaient pas sur le serveur), alors qu'ils ne sont plus remplacés. Essayé avec 2 différents serveurs web.
J'ai suivi le guide ici:
http://blogs.msdn.com/b/webdev/archive/2013/10/30/web-publishing-updates-for-app-offline-and-usechecksum.aspx
...Mais il n'a réussi à mettre le site hors ligne (VS est de placer le app_offline.htm) mais publier échoue toujours avec la même erreur.
Tous les autres fichiers de publier parfaitement.
Des idées?
- Avez-vous essayez d'exécuter VS en tant qu'administrateur ?! J'ai eu une erreur semblable dans un projet en raison des autorisations.
- Assurez-vous que le site n'est pas en cours d'exécution en local sur votre machine.
- Je suis en train de publier sur une autre machine. VS a été lancé en tant qu'administrateur et le site n'est pas en cours d'exécution localement (VS essayé de la faire démarrer, mais je l'ai tué). Le message dans la console de sortie est:
- Je suis en train de publier sur une autre machine. VS a été lancé en tant qu'administrateur et le site n'est pas en cours d'exécution localement (VS essayé de la faire démarrer, mais je l'ai tué). J'ai vérifié le fichier à la fois localement et sur le serveur avec IOUnlocker juste pour voir si il y a une écluse dans le fichier et il n'y en a pas. Le message dans la console de sortie est: la mise à Jour de fichier (par Défaut Web Site\bin\SqlServerTypes\x64\msvcr100.dll). 3>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.La publication.cibles(4270,5): Erreur ERROR_FILE_IN_USE: déploiement Web echec de la tâche. (Le fichier 'msvcr100.dll' est en cours d'utilisation.
- Je suis moi aussi avoir ce problème. Ne semble pas le comprendre. Nous avons été l'arrêt d'IIS avant chaque déploiement. C'est la seule façon qu'il semble fonctionner.
- Je pense que IIS express est de les garder ouverts, même après votre sortie de votre application web. C'est un signe que vous devriez vérifier votre code et assurez-vous de disposer correctement des objets inutilisés correctement (par exemple, entourant
IDisposable
objets dansusing
blocs) - Avez-vous essayé d'utiliser la "poignée" de sysinternals. Souvent, il peut vous dire ce processus a une poignée pour un fichier donné. Vous pourriez même être en mesure d'exécuter le programme, obtenir la sortie, de l'analyser et de libérer les verrous - mais je suis en avance sur moi-même 🙂
- Je pense que ce n'est pas un problème avec la machine, vous êtes à la publication, mais plutôt que la machine cible. Est configuré WebDeploy utilisateur un administrateur? Je pourrais commencer par là, alors pour NonAdminUser déploiements je suivrais la suite de l'article IIS MANAGER POUR CONFIGURER le déploiement WEB POUR UN NON-ADMINISTRATEUR
- Trouver d'abord qu'est-ce que en utilisant le fichier à l'aide de Sysinternals Process Explorer sur le serveur comme suggéré par Derek. Ensuite, considérer également si c'est vraiment un gros problème pour ne pas avoir ces fichiers toujours réécrite avec la même version de la DLL de changement à copier si plus récent.
- Dans mon expérience, c'est votre machine locale, c'est la question. IIS Express est généralement le coupable ici, mais parfois le redémarrage/fin qui n'est pas toujours le tri. J'ai parfois eu à arrêter complètement toutes les instances de Visual Studio et/ou supprimer le contenu du dossier Bin - je trouver ce genre de question aime se produire lorsque vous avez plusieurs projets ouverts, là où le code est en quelque sorte partagé entre les deux.
- J'ai toujours utiliser Unlocker emptyloop.com/unlocker pour ce genre de choses à travailler d'abord quel est le processus à l'aide de/verrouillage d'un fichier. Attention pour désélectionner l'adware lors de l'installation si!
- Avez-vous essayé via ftp et de les supprimer manuellement?
- Oui la suppression de fichiers et de suppression des références aux bibliothèques a été la première étape. Le problème corrigé, j'ai présenté ci-dessous. Je n'ai pas vraiment identifier la cause, mais il peut aider une personne à résoudre leurs problèmes dans l'avenir.
Vous devez vous connecter pour publier un commentaire.
Que vous pouvez prendre votre application en mode hors connexion lors de la publication qui nous l'espérons, devrait libérer le verrou sur le fichier et vous permettra de le mettre à jour.
Je blogué sur ce un moment de retour. Le soutien décrites a été expédié à l'intérieur de l'Azure SDK et mise à Jour Visual Studio. Je ne me souviens pas exactement des rejets, mais je peux les trouver en cas de besoin. Toute mise à jour datant autour/après que le blog doit être fine.
Conditions préalables:
Remarque: si vous êtes à la publication à partir d'un serveur CI le serveur CI aura besoin de mises à jour ci-dessus ainsi
Modifier le profil de publication
VS, lors de la création d'un site Web de publication du profil les paramètres de la boîte de dialogue sont stockées dans
Properties\PublishProfiles\
que les fichiers qui se terminent par .pubxml. Remarque: il est également un.pubxml.user
fichier, ce fichier ne doit pas être modifiéDe prendre votre application en mode hors connexion dans le
.pubxml
fichier ajouter la propriété suivante.<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
Notes
ASP.NET Requis
La façon dont cela a été mis en œuvre sur le MSDeploy côté, c'est qu'une app_offline.htm fichier est supprimé à la racine du site/application. À partir de là, l'asp.net runtime détecter et prendre votre application en mode hors connexion. En raison de cette si votre site web/application ne dispose pas d'asp.net activée, cette fonction ne fonctionnera pas.
Les cas où il peut ne pas fonctionner
La mise en œuvre de ce fait en sorte que l'application peut ne pas être strictement hors connexion avant de publier commence. D'abord l'app_offline.htm fichier est supprimé, puis MSDeploy allons commencer à publier les fichiers. Il n'attend pas ASP.NET pour détecter le fichier et de le porter en mode hors connexion. En raison de cela, vous pouvez exécuter dans le cas où vous avez encore fonctionner dans le fichier de verrouillage. Par défaut VS permet retrys donc en général de l'application en mode hors connexion lors de l'une des retrys et tout est bon. Dans certains cas, il peut prendre plus de temps pour ASP.NET pour y répondre. C'est un peu plus compliqué.
Dans le cas que vous ajoutez
<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
et votre application n'est pas pris en mode hors connexion assez vite, alors je suggère que vous prenez de l'application hors ligne avant de le publier commence. Il y a plusieurs façons de le faire à distance, mais cela dépend de votre configuration. Si vous n'avez MSDeploy d'accès, vous pouvez essayer la séquence suivante:msdeploy.exe
à prendre hors ligne de votre site par la chute d'app_offline.htmmsdeploy.exe
de publier votre application (_make assurer que la synchronisation n'est pas de supprimer la app_offline.htm file_)msdeploy.exe
pour apporter de l'application en ligne par la suppression de app_offline.htmJ'ai blogué comment vous pouvez le faire à http://sedodream.com/2012/01/08/howtotakeyourwebappofflineduringpublishing.aspx. La seule chose qui manque à ce billet de blog est le délai à attendre pour le site pour être réellement prises en mode hors connexion. Vous pouvez également créer un script qui appelle simplement
msdeploy.exe
directement au lieu de l'intégrer dans le projet de construction/processus de publication.J'ai trouvé la raison pour laquelle la solution à
http://blogs.msdn.com/b/webdev/archive/2013/10/30/web-publishing-updates-for-app-offline-and-usechecksum.aspx
ne fonctionne pas pour le posteur d'origine, et j'ai une solution de contournement.
De la question avec le EnableMSDeployAppOffline approche est qu'elle ne recycle le domaine de l'application de l'hébergement de l'application. Il ne recycle pas l'application de la piscine processus de travail (w3wp.exe le domaine de l'application des vies dans.
Démolir et la recréation du domaine de l'application ne sera pas affecter la Spatiales Sql Server dll en question. Ces dll sont code non managé qui sont chargé manuellement via l'interopérabilité LoadLibray appels. Par conséquent, la dll de vivre en dehors de la sphère de compétence du domaine de l'application.
Afin de libérer les fichiers des écluses, le pool d'application procédé met sur eux, vous devez recycler l'application de la piscine, ou de décharger les dll de la mémoire manuellement.
Microsoft.SqlServer.Les Types de package nuget navires de classe qui est utilisé pour charger l'Spatiale dll appelé SqlServerTypes.Utilitaires. Vous pouvez modifier le LoadNativeAssemblies méthode pour décharger les dll non gérées lorsque le domaine d'application est déchargé. Avec cette modification, lorsque msdeploy copys l'app_offline.htm le domaine d'application décharger puis de décharger la dll gérés en tant que bien.
Il y a un problème avec cette approche. Il suppose que votre application est le seul cours d'exécution dans le processus de travail à l'aide de l'Spatiale dll. Depuis les pools d'application peut héberger plusieurs applications les verrous de fichier ne sera pas publié si une autre application est également chargé de mer. Cela permettra d'éviter votre déployer à partir d'un travail avec le même fichier verrouillé erreur.
Il y a des problèmes connus avec IIS et fichier-écluses (pourquoi ils ne sont pas encore résolus, je ne sais pas).
La question que je veux poser est cependant si vous avez encore besoin de re-déployer ces fichiers?
Je reconnais les noms de fichier et de les rappeler pour le système de fichiers qui devrait déjà être présent sur le serveur ou tout simplement pas besoin d'être re-déployé.
Je ne suis pas très expérimenté en matière de IIS mais j'ai rencontré ce problème avant de et plusieurs de mes collègues plus expérimentés m'ont dit que c'est comme je l'ai dit plus connu IIS problème, et je crois que la réponse à votre question est:
Je pense que ce serait la meilleure chose à faire est de faire de ces dll CopyLocal comme vrai. Je suis en supposant que ces dll sont retirés du dossier program files. Essayez en les marquant comme copylocal vrai et de faire un déploiement.Essayez d'empêcher tout IIS local processus en cours d'exécution dans votre machine locale.
Attention vous n'avez pas l'un de ceux d'un nouveau genre de services cloud de sauvegarde en cours d'exécution qui est de prendre des verrous de fichier - et aussi, vous n'avez pas de choses ouvrir dans l'explorateur ou une DLL outil d'inspection.
Je pense que c'est un peu ridicule que MS n'a pas à prendre de meilleures dispositions pour ce problème. Je trouve que 9 fois sur 10 mon déploiement fonctionne très bien, mais alors que notre augmentation du trafic qui peut être 1 à 10 fois.
Je vais résoudre le problème de l' :
MySite.A
etMySite.B
, où un seul est en cours d'exécution à la fois.Pas tout à fait sûr de savoir comment je me suis mise en œuvre, mais je pense que c'est ce que je dois faire.