Visual Studio 2010 build fichier de verrouillage questions
J'ai un projet Visual Studio 2008 que j'ai "mis à niveau" de Visual Studio 2010. Depuis la mise à jour j'ai eu beaucoup de problèmes avec le projet (un projet qui a été et est encore trooper en 2008, je pourrais ajouter).
Le premier problème est que la construction de l'exécutable principal verrouille le fichier exécutable, causant plus de reconstruit à l'échec. Ceci est décrit dans une question connexe: Visual Studio verrous de fichier de sortie sur la compilation où j'ai pris la solution de contournement:
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
Sauf que cette solution fonctionne exactement une fois. L' .verrouillé le fichier est verrouillé par devenv.exe ainsi et doit être déplacé. J'ai travaillé autour de ce en ajoutant .1.verrouillé .2.verrouillé, etc. La seule fois que les verrous sont retirés afin que les fichiers peuvent être supprimé est sur l'arrêt de devenv.exe (cela prend quelques secondes après l'INTERFACE utilisateur disparaît, puis les fichiers peuvent être supprimés).
Le fait que le débogueur n'a pas à être utilisé pour provoquer ce problème points à un très sérieux problème avec la génération 2010 système.
Certaines théories, je pense que je peux discount:
- Antivirus ou d'autres tâches en arrière-plan: si c'était un problème, il semblerait 2008 serait un échec. Cependant, étant un completest j'ai supprimé avast! système entièrement avec pas de chance.
Mise à JOUR: Ce projet a les mêmes symptômes sur une machine sans antivirus et aucun utilitaire de sauvegarde. Les machines de l'office sont en cours d'exécution XP SP3 32 bits, ma machine locale Windows 7 64 bits. Cela semble être indépendant du système d'exploitation.
- Le débogueur est le verrouillage du fichier: tout ce qui est nécessaire pour reproduire ce qui est de répéter le processus de construction sans débogage. ProcessExplorer montre devenv.exe est le titulaire de serrures, pas la vshost et de tuer la vshost.exe ne pas supprimer les verrous de toute façon.
J'ai un problème secondaire qui commence à se produire une fois que les fichiers sont verrouillés: les concepteurs de formulaire arrêter le chargement avec un "ne peut pas trouver de l'assemblée d'erreur". Je soupçonne ceux-ci sont liés à la précédente problème de verrouillage, comme les concepteurs de feu jusqu' avant à construire, mais de faire tous les changements et la reconstruction de tous les designers à s'effondrer avec une erreur (même ceux que j'ai ouvert et que la vue en cours).
C'est pitoyable à regarder un formulaire à proximité de le blanc d'erreur de l'écran juste parce que vous avez changé de "dummy=1" à "dummy=2" où "factice" ne fait absolument rien, mais la force d'une recompilation dans un complètement indépendant de l'assemblée.
Mise à jour: j'ai essayé un peu plus de recours: Activer .Source NETTE intensification est pas vérifié, ce n'est pas la question. Retrait de l' .SUO (solution d'options de l'utilisateur), il suffit de fonctionne aussi longtemps que un redémarrage normalement à supprimer le problème (deux versions: la première, car il n'existe pas de fichier verrouillé et le second parce qu'il y en a un, mais il peut être renommé par le script).
Error 28 Unable to copy file "obj\Debug\PolicyTracker3.exe" to "bin\Debug\PolicyTracker3.exe".
The process cannot access the file 'bin\Debug\PolicyTracker3.exe' because it is being used by another process.
- Avez-vous jamais résoudre ce problème?
- Autant que les informations contenues dans la seule réponse que j'ai obtenu ici DONC, la caractéristique mentionnée (.NET framework source) n'est pas activé et n'a jamais été activé.
- Pour le record, je suis également ce problème, et la solution est aussi un converti partir de 2008 alors peut-être qui a quelque chose à faire avec elle. Je ne suis pas le concepteur de formulaire de problèmes, mais tout le reste est presque exactement comme vous le décrivez.
- Ortiz - essayer le code que j'ai mis dans la section réponse. Depuis que j'ai ajouté cette je trouve à chaque fois dans un certain temps je suis confronté à un blocage de l'DLL, mais il est beaucoup moins gênant quand le renomme des fichiers verrouillés sont automatisées et vous ne devez redémarrer une fois ou deux fois par jour.
- J'ai, et ça fonctionne, merci.
- Cela semblait avoir aidez-moi: stackoverflow.com/questions/3312646/...
- Cela semble très plausible pour moi: j'ai une tendance à arrêter des services que je ne suis pas en utilisant leur. La machine je rencontre le problème a été "optimisé" un peu comme ça, alors que mon ordinateur portable (où il ne se passe pas) a le service en cours d'exécution. Je mettrai à jour ce commentaire une fois que j'ai peu de temps sous ma ceinture avec la machine qui exécute le service de nouveau!
Vous devez vous connecter pour publier un commentaire.
Jusqu'à ce qu'un patch arrive pour cela, j'ai la solution de contournement suivante. Appelez simplement en utilisant quelque chose comme
"C:\MyBin\VisualStudioLockWorkaround.exe" "$(TargetPath)"
(en remplacement de MyBin avec l'emplacement que vous placez le fichier exécutable).Créer cela comme une application console C# et est utilisé dans le Pré-Construire la section de la même manière que l'original de pré-construction renommer était (voir le haut de la question d'origine pour plus de détails).
Il y a un fichier connu la fuite de bug dans le .NET framework source de l'intensification de la fonctionnalité. Facile de les éviter par la désactivation de l'option dans Outils + Options + Débogueur. C'est toutefois peu probable que votre problème si vous n'avez jamais eu le débogueur va.
Il est assez difficile de comprendre pourquoi Visual Studio serait tout intéressés à la sortie de la construction, sans parler de la charge et de la verrouiller. Peut-être que vous avez ouvert la .exe une fois? Supprimer le caché .suo fichier dans la solution d'annuaire pour être sûr. Il n'y a pas de rapport d'information sur connect.microsoft.com qui correspond à votre question, je vous recommande de commencer votre propre. Ils auront besoin de quelque chose de reproductible pour eux de prendre un coup d'oeil, assurez-vous d'inclure un exemple de projet qui présente ce comportement.
Malheureusement renommer/déplacer le fichier verrouillé ne fonctionne pas pour moi (les poignées ont été ouverts avec seulement FILE_SHARE_READ), mais ce qui a fonctionné a été simplement de tuer ceux (probablement fui) poignées dans le processus Visual Studio. Vous pouvez utiliser KillHandle d'automatiser cette étape.
Déjà dans Ms Connecter:
http://connect.microsoft.com/VisualStudio/feedback/details/551819/vs2010-locks-static-library-after-debug-session
solution consiste à désactiver la 'source de l'étape", mais ne fonctionne pas pour moi).
Dans mon cas, j'ai très personnalisés de construire pour une extension de Visual Studio 2010 qui a fonctionné sans problème dans Visual Studio 2008. À un moment de la construction, une partie de la sortie assemblées sont chargés dans un autre domaine d'application pour la génération de la documentation et puis le domaine déchargé. Le domaine de déchargement a été fonctionne correctement, confirmé par l'inspection de l'application de liste de domaine avant et après.
Visual Studio 2010 semble tenir descripteur de fichier des verrous sur toutes les assemblées chargées avec le fichier de la base de Montage.Charge* Api qui fonctionnent sur les descripteurs de fichiers ou chemins. J'ai pu voir le descripteur de fichier apparaissent dans ProcessExplorer dès que l'Assemblée.La charge exécutée, et la poignée jamais sorti, même après le domaine d'application a été déchargé.
J'ai pu contourner le problème en chargeant le raw de l'assemblée octets à l'aide d'un FileStream et le byte[] de l'Assemblée.La charge de la surcharge.
J'ai vu une réponse à:
http://social.expression.microsoft.com/Forums/en-US/blend/thread/844dfea0-efa2-440d-97ce-49ac7108dae3
(voir le post de Navit Saxena)
Il mentionne la fermeture de la fichiers XAML (conception des surfaces) et qui semble fonctionner pour moi. Je sais c'est pas génial, mais au moins je n'ai pas à redémarrer VS.
Je suis un peu en retard à la fête, mais ce problème s'est produite pour la première fois après la mise à niveau de VS2015. Il n'est jamais arrivé avec VS2010!
Nous développent fréquemment avec plusieurs instances de VS ouverts en même temps - c'est une application client/serveur et nous apportons des changements à deux niveaux simultanément.
Après la mise à niveau de VS2015, les deux instances de VS serait "verrouiller les uns les autres" de l'obj\Debug et une instance finirais pas être en mesure de construire de la commune ("shared") des projets, c'est à dire notre DTO, entity framework projets.
J'ai essayé de le pre-build script, et il a travaillé sur l'occasion. Il n'était tout simplement pas une source fiable pour notre cas, parfois la dll était tellement verrouillé qu'il ne pouvait même pas être renommé/déplacé.
J'ai fini par tout simplement à l'aide de différentes configurations de génération pour chaque solution (copié à partir de Débogage). Cela a créé une nouvelle solution spécifique obj et de la corbeille de répertoires et d'éviter les controverses sur la dll correspondant à des projets communs.
Espère que cela aide quelqu'un d'autre.