Visual Studioで「xcopyがコード4で終了しました」と通知されたときの問題


125

ビルド後のイベントについてはあまり詳しくないので、プログラムの問題点について少し混乱しています。Visual Studio 2010でコンパイルすると、次のようになります。

The command "xcopy C:\Users\Me\Path\Foo.bar\Library\dsoframer.ocx C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\Foo.bar\ApplicationFiles C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\url\ C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
rmdir /S /Q C:\Users\Me\Path\Foo.bar\bin\Debug\.gwt-tmp" exited with code 4.    

このエラーにもかかわらず、プログラムは問題なく実行されているように見えますが、この問題を無視したくありません。奇妙なことに、この行は単一のコマンド(最初のxcopy)だけで始まっていましたが、プロジェクトのコンパイル(他の問題、主に参照の修正)を続けると、エラーメッセージが次第に大きくなりました。何が起こっているのでしょうか?

編集:ここでは失敗しているように見えるポストビルドイベントがあります-

xcopy $(ProjectDir)Library\dsoframer.ocx $(TargetDir) /Y /E /D
xcopy $(ProjectDir)ApplicationFiles $(TargetDir) /Y /E /D
xcopy $(SolutionDir)com.myUrl.gwt\www $(TargetDir) /Y /E /D
rmdir /S /Q $(TargetDir).gwt-tmp

2
以下の回答とは別に、必ずでVSを開いてくださいAdministrator privileges。特定の場所にコピーするには、管理者権限が必要です。
Nikhil Agrawal

回答:


166

Xcopy終了コード4は、「初期化エラーが発生しました。十分なメモリまたはディスク容量がないか、コマンドラインに無効なドライブ名または無効な構文を入力しました。

Visual Studioがxcopyに無効な引数を提供しているようです。を介してビルド後のイベントコマンドを確認しますProject > Right Click > Properties > Build Events > Post Build Event

$(ProjectDir)展開されたときに、結果のパスに、または類似のマクロ用語にスペースがある場合、それらを二重引用符で囲む必要があることに注意してください。例えば:

xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1

言ったように、私はビルド後のイベントスクリプトについてはあまり知りません(そして私はこれらを記述しませんでした)。これはどこにありますか?
レイヴンドリーマー

1
ゴープロパティ]> [ビルドイベント投影する
マークシダイデ

2
各コマンドを二重引用符("command args")で囲みます。
グラントトーマス

@Mark Cidade-「ビルドイベント」がどこにもないようです。共通プロパティのリスト:「スタートアッププロジェクト、プロジェクトの依存関係、デバッグソースファイル、コード分析設定」。リストされた構成プロパティ:「構成」。
レイヴンドリーマー

4
@RavenDreamer:($(ProjectDir)または類似の)拡張パスにスペースがある場合は、引用符で囲む必要があります。たとえば、次のようにxcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1
グラント・トーマス

34

監視タブを「出力」に切り替え、xcopyコマンドを探します。ここで、問題の解決に役立つメッセージ(実際のxcopy出力)が見つかることがあります。出力タブが表示されない場合は、表示-出力メニューを使用して表示します。


30

受け入れられた回答に加えて、宛先フォルダーが読み取り専用の場合にもエラーが発生する可能性があります(TFSを使用する場合に共通)


2
そして、下記の@FelicePollanoのように出力ウィンドウに切り替えると確認できるものがあります。
Jedidja 2013

20

ソースファイルが見つからない場合、xcopyはエラーコード4も返します。


3
これは私のケースでした。私は$(TargetDir)で終わるを使用しましたRelease\ $(ProjectDir)\bin\Releaseトレーリングなしでの使用\\ は私にとっては
うまくいっ

12

xcopyコマンドが読み取り専用ファイルを上書きしようとしたときに、「コード4で終了しました」エラーを受け取りました。xcopyコマンドに/ Rを追加することで、この問題を解決することができました。/ Rは示して、読み取り専用ファイルを上書きする必要があります

古いコマンド:

XCOPY /E /Y "$(ProjectDir)source file" "destination"

新しいコマンド

XCOPY /E /Y /R "$(ProjectDir)source file" "destination"

8

他の回答で説明されているように、終了コード4には多くの原因が考えられます。

結果のパス名が最大許容長を超えたここと同じよう)ケースに気付きました。

影響を受けるビルド後のイベントのために、xcopyをrobocopyに置き換えました。robocopyは少し異なるパスを処理するようで、xcopyが処理できなかったコピータスクを完了することができました。


5

それは意味します:

初期化エラーが発生しました。十分なメモリまたはディスク領域がないか、コマンドラインに無効なドライブ名または無効な構文を入力しました。

したがって、基本的には何でもかまいません。コマンドプロンプトから一度に1つずつコマンドを実行して、どのコマンドのどの部分が問題を引き起こしているかを調べてください。


3

メッセージと一緒にこれを手に入れました

無効なドライブ指定

ドライブ名を指定せずにネットワーク共有にコピーする場合、例えば

xcopy . \\localhost

どこ

xcopy . \\localhost\share

期待された


2

私はこの問題に遭遇したので、コマンドラインからxcopyコマンドを実行しましたが、

File creation error - The requested operation cannot be performed on a file with
 a user-mapped section open.

それは実際には何かを握っているVisual Studioでした。Visual Studioを再起動したところ、うまくいきました。


1

私の場合、問題は間違ったビルド順序が原因でした。1つのプロジェクトには、binフォルダーから別のフォルダーにファイルをコピーするビルド後のイベントでxcopyコマンドがありました。しかし、依存関係が正しくないため、xcopyの進行中に新しいファイルがbinフォルダーに作成されていました。

VSで、ビルド後のイベントがあるプロジェクトを右クリックします。Build Dependencies> Project Dependenciesに移動し、正しいことを確認します。プロジェクトのビルド順序(次のタブから依存関係)も確認してください。


1

このエラーは、リポジトリがコピーされる場所に空白がある場合に発生します。たとえば、私のプロジェクトは下の場所にコピーされ、c://projects/My rest project そこに空白が表示され ます。レポパスを下に変更すると、機能するはずです。 c://projects/myrestproject


0

私も同じ問題を抱えていました。スラッシュが指している方向を確認することもできます。私にとっては、スラッシュの代わりにバックスラッシュを使うように働きました。例

xcopy /s /y "C:\SFML\bin\*.dll" "$(OutDir)"

の代わりに:

xcopy /s /y "C:/SFML/bin/*.dll" "$(OutDir)"

0

VS 2017で更新を行う前に、問題なく動作するビルド後のコマンドがありました。SDKツールが更新され、新しいパスの下にあるため、アセンブリの署名に使用しているツールを見つけることができませんでした。

これはこれから変わった...

call "%VS140COMNTOOLS%vsvars32"
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

これに...

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

非常に微妙ですが重大な変更です。このエラーが表示された場合は、更新後にパスを確認してください。


0

もう1つの注意点はxcopy、入力パスパラメータで許容されないためです(ただし、出力パスで許容されます)。

ここに画像の説明を入力してください


0

他のソリューションがデバッグモードの場合は、まずそれらをすべて停止し、その後Visual Studioを再起動します。それは私のために働いた。


0

これは、ターゲットフォルダが他のプロセスで使用されている場合にも発生する可能性があります。ターゲットフォルダを使用する可能性のあるすべてのプログラムを閉じて、試してください。

リソースモニター(Windowsツール)を使用して、ターゲットフォルダーを使用するプロセスを確認できます。

これは私のために働きました!。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.