2009-07-15 6 views
2

J'utilise Hudson comme serveur d'intégration continue. Les travaux finissent par lancer MSBuild. Tout le monde de temps en temps, mon génération échoue avec une erreur non-compilation du code de MSBuild:MSBuild "Impossible de copier le fichier" dans l'environnement CI

C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(2703,9): error MSB3021: Unable to copy file "..\Lib\Microsoft\Microsoft.Practices.Unity.Configuration.dll" to "bin\Debug\Microsoft.Practices.Unity.Configuration.dll". Access to the path 'bin\Debug\Microsoft.Practices.Unity.Configuration.dll' is denied. 

Quand j'examine 'bin \ Debug \ Microsoft.Practices.Unity.Configuration.dll', je trouve être un fichier de 0 octet.

Je n'arrive pas à comprendre pourquoi ce fichier est problématique. Des idées?

Répondre

1

Cela ressemble à un processus qui maintient bin \ Debug \ Microsoft.Practices.Unity.Configuration.dll ouvert. Vous pouvez vérifier cela plus tôt en renommant 'bin' à quelque chose d'autre, comme 'bin-old', puis en supprimant 'bin-old' Si un processus maintient les fichiers dans 'bin' ouverts, le renommer échouera.

+0

c'est cool et tout, mais comment nous empêchons vs2012 de verrouiller le fichier? il est en effet tenu en otage par le processus devenv.exe, et ne peut pas continuer jusqu'au redémarrage de vs2012. – Kirka121

+1

Vous ne savez pas comment aider sur ce front. Ma solution est destinée à aider à trouver un mécanisme d'échec plus rapide, de sorte que vous n'ayez pas connaissance de l'échec après avoir attendu la fin de la construction. –

0

Utilisez Handle.exe de SysInternals (Microsoft) pour voir quels fichiers sont conservés ouverts par quels processus.

Exécutez ceci à une invite de commande lorsque vous obtenez l'erreur; Handle.exe> ​​OpenFile.txt Notepad.exe OpenFile.txt

Ensuite, recherchez OpenFile.txt pour le fichier verrouillé et vous verrez le processus.

Ryan

+0

L'utilisation de ProcessExplorer de SysInternals serait une façon plus directe de le faire. Sélectionnez "Rechercher". "Rechercher Handle ou DLL ..", puis collez le nom du fichier dans la zone de recherche. –

6

MS Créer tâche Copier a fonctionnalité non documentée, au moins Google garde le silence. Si le système mis en environnement large variables MSBUILDALWAYSRETRY = 1 Cette tâche nouvelle tentative de copier un fichier même il obtient exception Refusé d'accès pendant l'opération de copie

Exemple de sortie

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (3513): Got System.UnauthorizedAccessException: Access to the path 'C:\Builds\8\28\Binaries\Release\fr\System.Spatial.resources.dll' is denied. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost) 
    at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite) 
    at Microsoft.Build.Tasks.Copy.CopyFileWithLogging(FileState sourceFileState, FileState destinationFileState) 
    at Microsoft.Build.Tasks.Copy.DoCopyWithRetries(FileState sourceFileState, FileState destinationFileState, CopyFileWithState copyFile) copying C:\Builds\8\28\Sources\Main\Solutions\packages\System.Spatial.5.2.0\lib 
et40\fr\System.Spatial.resources.dll to C:\Builds\8\28\Binaries\Release\fr\System.Spatial.resources.dll and HR is -2147024891 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (3513): Retrying on ERROR_ACCESS_DENIED because MSBUILDALWAYSRETRY = 1 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (3513): Could not copy "C:\Builds\8\28\Sources\Main\Solutions\packages\System.Spatial.5.2.0\lib 
et40\fr\System.Spatial.resources.dll" to "C:\Builds\8\28\Binaries\Release\fr\System.Spatial.resources.dll". Beginning retry 1 in 1000ms. Access to the path 'C:\Builds\8\28\Binaries\Release\fr\System.Spatial.resources.dll' is denied. 
+0

J'ai trouvé que redémarrer le Build Service a également aidé. – PenFold

+0

Montrer sur MSBuild git: https://github.com/Microsoft/msbuild/blob/master/src/XMakeTasks/Copy.cs –

Questions connexes