2009-07-15 18 views
2

私はHudsonを継続的な統合サーバーとして使用しています。ジョブは最終的にMSBuildを起動します。たまにみんな、私のビルドはMSBuildの外の非コードコンパイルエラーで失敗します。MSBuild 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. 

私は「デバッグ\ Microsoft.Practices.Unity.Configuration.dll \ binに」を調べると、私はそれを見つけます0バイトのファイルにする。

なぜこのファイルに問題があるのですか?何か案は?

答えて

1

プロセスのようなサウンドは、bin \ Debug \ Microsoft.Practices.Unity.Configuration.dllを開いたままにしています。 'bin-old'のような名前に 'bin'の名前を変更して 'bin-old'を削除することでこれを前もって確認できます。 'bin'のファイルを開いているプロセスがあれば、名前変更は失敗します。

+0

例を例外を拒否された取得した場合vs2012がファイルをロックしないようにしますか? devenv.exeプロセスによって実際に人質にされており、vs2012が再起動するまで続行することはできません。 – Kirka121

+1

そのフロントを助ける方法がわかりません。私の解決策は、より速く失敗するメカニズムを見つけるのを助けることを目的としているので、ビルド全体がほぼ完了するのを待ってから失敗を知ることはできません。 –

0

SysInternals(Microsoft)のHandle.exeを使用して、どのプロセスがどのファイルを開いているかを確認します。

エラーが発生したら、これをcmdプロンプトで実行します。 Handle.exe> OpenFile.txt Notepad.exe OpenFile.txt

次に、OpenFile.txtでロックされたファイルを検索すると、そのプロセスが表示されます。

もライアン

+0

SysInternalsのProcessExplorerを使用する方がより直接的な方法です。 「検索」を選択します。「ハンドルまたはDLLを検索」をクリックし、ファイル名を検索ボックスに貼り付けます。 –

6

MSはコピータスクを構築するには、少なくともGoogleは沈黙を保ち、文書化されていない機能があります。 = 1 設定し、システム全体の環境変数MSBUILDALWAYSRETRYこの作業では、ファイルをコピーするために再試行するとしても、それはアクセスが、これはクールですべてですが、どのように行うコピー操作中に出力

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

私は、ビルドサービスの再起動も助けになることがわかりました。 – PenFold

+0

MSBuildで証明:https://github.com/Microsoft/msbuild/blob/master/src/XMakeTasks/Copy.cs –

関連する問題