99

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

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

通常copyのを使用すると、コード1で終了します。これはファイルロックと関係があると思いますが、コピーされる特定のファイルは同じではないため、共有先ディレクトリをロックするだけです。私は/yファイルの上書きを促さないために使用します。

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

4

6 に答える 6

159

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

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

コピーしているのがファイルであると言うには、次のようにエコーしFます。

echo F|xcopy /y ...

コピーしているのがディレクトリであると言うには、echo in D

echo D|xcopy /y ...

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

copy /y ...

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

注意:/Cスイッチとxcopyの使用には注意が必要です。

于 2013-02-01T00:43:00.873 に答える
39

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

于 2013-10-13T13:03:40.057 に答える
34

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

/C           Continues copying even if errors occur.
/Y           Suppresses prompting to confirm you want to overwrite an existing file.
于 2012-03-12T16:36:39.807 に答える
2

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

于 2013-04-26T03:46:03.130 に答える
2

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

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

于 2014-12-30T17:25:06.820 に答える
2

copy私のためにそれを修正しました。xcopy with /c /y動作しませんでした。私は出口4を取得していたので、一緒に行きましたがxcopy、周りに引用符が必要であることがわかりまし($TargetPath)た。

私のスクリプト:

if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug\$(TargetFileName)"
于 2018-07-24T14:15:07.270 に答える