在CI环境中MSBuild“无法复制文件”

时间:2009-07-15 19:25:18

标签: msbuild hudson

我正在使用Hudson作为持续集成服务器。这些工作最终将启动MSBuild。每个人偶尔,我的构建失败,出现MSBuild的非代码编译错误:

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.

当我检查'bin \ Debug \ Microsoft.Practices.Unity.Configuration.dll'时,我发现它是一个0字节的文件。

我不知道为什么这个文件有问题。有什么想法吗?

4 个答案:

答案 0 :(得分:6)

MS Build Copy任务有未记录的功能,至少谷歌保持沉默。 如果设置系统范围的环境变量MSBUILDALWAYSRETRY = 1 此任务将重试复制文件,即使它在复制操作期间获得“拒绝访问”异常

输出示例

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.

答案 1 :(得分:1)

听起来像一个进程正在按住\ Debug \ Microsoft.Practices.Unity.Configuration.dll打开。 您可以通过将'bin'重命名为其他内容来检查,例如'bin-old'然后删除'bin-old'如果任何进程将'bin'中的文件保持打开状态,则重命名将失败。

答案 2 :(得分:0)

使用来自SysInternals(Microsoft)的Handle.exe查看哪些文件被哪些进程保持打开。

当您收到错误时,在cmd提示符下运行此命令;  Handle.exe> OpenFile.txt  Notepad.exe OpenFile.txt

然后在OpenFile.txt中搜索已锁定的文件,您将看到该过程。

赖安

答案 3 :(得分:0)