web-dev-qa-db-ja.com

TeamCityビルドで、ビルド後のステップ(xcopy)がコード2で時々終了するのはなぜですか?

クライアントのソリューションのいくつかのプロジェクトには、ビルド後イベントがあります。xcopy特定のフォルダーへのビルド出力。これは、ローカルでビルドするときに正常に機能します。ただし、TeamCityでは、I ときどき get

xcopy [...]はコード2で終了しました

通常のcopyを使用すると、コード1で終了します。コピーされる特定のファイルは同じではありませんが、ファイルのロックに関係していると思われます。私が使う /yファイルの上書きに関するプロンプトを表示しません。

TeamCityではこれが失敗するのに、ローカルでは失敗するのはなぜですか?

87
Tim Iles

/Yスイッチにxcopyを指定しても、コピーするファイルがファイルかディレクトリかをxcopyが認識しないと、エラーが発生します。このエラーは、「コード2で終了」と表示されます。コマンドプロンプトで同じxcopyを実行すると、xcopyがファイルまたはディレクトリの応答を要求していることがわかります。

自動ビルドでこの問題を解決するには、事前定義された応答をパイプでエコーします。

コピーしているものがファイルだと言うには、Fにエコーします:

echo F|xcopy /y ...

コピーしているのはディレクトリだと言うには、Dにエコーします:

echo D|xcopy /y ...

Xcopyの代わりにcopyコマンドを使用するだけで、上記の問題を解決できる場合があります。

copy /y ...

ただし、最終ファイル宛先に至るまで存在しないディレクトリがある場合、「コード1で終了」が発生します。

要確認:/Cスイッチとxcopyは注意して使用してください。

134
Metro Smurf

パスの最後に\を追加することでエラーコード2を修正しました。これがないと、xcopyはフォルダーではなくファイルであると見なします。

34
Benjiko99

ビルド後イベントでxcopyを使用している場合は、/ Cに加えて/ Yスイッチを使用します。

/C           Continues copying even if errors occur.
/Y           Suppresses prompting to confirm you want to overwrite an existing file.
31
DavidS

この問題に対する私の修正は、ターゲットbinフォルダーに移動し、適切なサブフォルダーがそこに存在することを確認することでした。そのサブフォルダーが手動で作成されると、ビルドプロセスは正常に完了しました。

2
boomer57

おそらく、TeamCityをgitで使用しています。はいの場合、コピーするfoldersがgitリポジトリに存在することを確認します。通常、git aviodは空のプロジェクトフォルダーをリポジトリに追加するため、xcopyはそれを見つけられず、エラーを生成します。

空のフォルダーに空のテキストファイルを追加してコミットし、フォルダーがリポジトリに表示されるのを確認できます。

1
iliya

copyが修正してくれました。 xcopy with /c /y 動作しませんでした。出口4を取得していたので、xcopyを使用しましたが、($TargetPath)

私のスクリプト:

if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug\$(TargetFileName)"
1
Matt