ビルド時にコマンドコピーがコード4で終了しました-Visual Studioの再起動で解決します


151

ここに(7つのプロジェクトを含む)ソリューションをビルドすると、Visual Studio 2010 Premium edで恐ろしい「コマンドコピーがコード4で終了しました」エラーが発生します。

これは、ビルド後のイベントが実行できないためです。

これが一時的に問題を解決するものです

  • 時々:Visual Studioを再起動すると、ソリューションを構築できます
  • 時々:Visual Studioの再起動と選択したファイルマネージャー(Q-Dir 4.37)の両方で解決します。

ビルド後のイベントは次のようになります。

xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y

コマンドのコピーがコード[値の挿入]エラーで終了した場合、通常は次の原因が考えられます。

  • 読み取り/書き込み権限
  • 不足しているファイル
  • 間違ったディレクトリ

ただし、明らかに私がソリューションを構築するときは、問題はありません。

ちなみに、2週間前にReSharper 5.1.1をアンインストールしましたが、それ以降、Visual Studioからいくつかのエラーが発生しました(その中にはデバッグできません)。私はVisual Studioを再インストールしましたが、それ以降はうまく機能していますが、それでもこの問題が発生します。それはどこかにあるReSharperのものと関係があるのでしょうか?

あなたは同じ問題を抱えてそれを解決しましたか?それとも可能な解決策はありますか?

回答:


74

これは常にファイルロックの問題であることがわかりました。コード4はファイルにアクセスできません。私が見つけた部分的な解決策の1つは、xcopyに/ Cオプションを使用することです(エラーが発生しても続行されます)。実際の解決策ではありませんが、ほとんどの場合、ビルドが失敗するのを防ぎました。

32ビットでのみ機能する別の解決策は、ロック解除ツールを使用して、コピーの前にファイルのウィンドウハンドルを解放することです。

編集:64ビットでも動作することに気づきました。


3
上記のxcopyコマンドに/ Cオプションを追加し、ビルドを成功させました。ありがとう!ロック解除者は時々非常に貴重です。
Martin S Ek

2
ファイルの1つが読み取り専用だったため、この問題が発生しました。それを変更したら、うまくいきました。
ボブ・ホーン

この問題は、問題のあるファイルに対する読み取り専用のアクセス許可を削除することで解決されることも証明できます。記載されている問題の原因となった外部のbinフォルダーがあります。読み取り専用属性を削除すると、ソリューションをビルドしようとしたときにエラーが表示されなくなりました。
eniacAvenger 14

3
あなたがポイントしているこのロック解除者は、ほぼすべてによってウイルスとして検出されます。(Googleセーフブラウジングスタッフ、eset、virustotal ...)。ここではそれについての議論であるように思わcnet.com/forums/discussions/unlocker-contains-malware-558941
v.oddou

この回答が何歳か覚えておいてください。あなたが主張しているウイルスは実際にはアドウェアのもののようですが、今ではアンインストーラーソフトウェア自体ではなく、インストーラーにバンドルされているようです。
Preet Sangha 2015

196

一方で/Cエラーを無視して成功するビルドのためにコピーされなければならないファイルがあるかもしれないとして、それは真の解決策ではないかもしれません。

最も一般的な問題は、事前定義されたコマンドタグ(など$TargetDir)の前後に引用符がないことです。コードまたはTFSでさまざまなブランチとパスを作成すると、これが発生する可能性が非常に高くなります。

ファイルが読み取り専用の場合、問題が発生することもあります。/R読み取り専用ファイルのコピーを許可するオプションを追加します。利用可能なオプションのリストは次の場所にあります。

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true

別の考えられる問題は、基になるフォルダーにアクセスできないことです。もしそうなら、"start xcopy"代わりに実行してみてください"xcopy"。別のコマンドウィンドウが開きますが、管理者権限が必要です。


53
'start'で修正されました...他のフォーラムからは、宛先が私のボックスに 'Everyone'のFullControlがあるにもかかわらず、これは 'start'が解決する権限の問題のようです。また、「start / MIN xcopy ...」を実行して、ウィンドウのちらつきを最小限に抑えることができます
mdisibio

2
c:\ windows \ system32 \ xcopy.exe $(TargetPath)<destination path>をc:\ windows \ system32 \ xcopy.exe "$(TargetPath)" <destination path>に変更しましたが、最後の50以上で問題はありませんビルド。
pennyrave

1
「$(OutDir)$(TargetFileName)」を使用しましたが、「$(TargetPath)」に変更すると問題が解決します。「スタート」を使用するのと同じように!
1

私の問題は、ハイフンの代わりに親フォルダ名の1つにen-dash文字を使用することに起因しているようです。「1234 – ABCD」のように、ブランチフォルダーの名前を単語からコピー/貼り付けするのを間違えました。名前を「1234-ABCD」に変更すると、xcopyは正常に動作します。
Sudeep、2014

追加start/R、念のため...どちらがトリックをしたのかわかりませんが、うまくいきました!ありがとう!
sǝɯɐſ 2014

19

同じエラーを乗り越えましたが、ファイルがロックされているためではありませんが、ファイルがありません。

VSが存在しないファイルをコピーしようとしたのは、ビルド後のイベントコマンドが原因です。

それをクリアした後、問題は解決しました。

更新:

@rhughesがコメントしたように:

実際の問題は、コマンドを削除するのではなく、ここで機能させる方法です。

そして彼は絶対的に正しいです。

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


1
ビルド後にファイルをコピーしていた場合は、ここにコマンドを入力したことが原因である可能性があります。実際の問題は、コマンドを削除するのではなく、ここで機能させる方法です。
rhughes 2013年

9

私もこの問題に直面しています。エラーウィンドウで結果を再確認してください。

私の場合、テーリング\がxcopyをクラッシュさせていました(私がを使用していたとき$(TargetDir))。私の場合$(SolutionDir)..\bin。他の出力を使用している場合は、これを調整する必要があります。

またstart xcopy、コンパイル後にエラーが消えた場合は、それを修正しないことに注意してください。コマンドラインによって抑制された可能性があり、実際にはファイルがコピーされていません。

コマンドシェルでxcopyコマンドを手動で実行できます。それらをそこで実行すると、より詳細な情報が得られ、正しい方向を示します。


$(OutDir)でも同じことが起こりました。すべての
パスマクロの

6

ビルド後のイベントにビルド出力を一部のディレクトリにコピーするためのcopy / xcopyコマンドが含まれている場合(通常、これは最も一般的なポストビルド操作です)、ソースまたはターゲットの宛先のフルディレクトリパスに以下を含むフォルダー名が含まれている場合に問題が発生する可能性がありますスペース。ディレクトリ名のスペースを削除して、再試行してください。


5

多くのサイトで言及されているように、これにはさまざまな理由があります。私にとっては、送信元と宛先の長さ(パスの長さ)が原因でした。コマンドプロンプトでxcopyを試しましたが、完全なソースとパスを入力できませんでした(一部の文字を入力すると、入力できなくなります)。その後、パスを短くして走ることができました。お役に立てれば。


4

管理者モードでVSを実行すると、問題なく動作するはずです。


1
VSを管理者として実行していますが、これはうまくいきませんでした。
アラファト

一部のユーザーは、管理者モードで実行できない場合があります。
MrSpudtastic

3

TFSビルドサービスが実行されているユーザーアカウントに、宛先フォルダーへの書き込み権限がないため、このエラーが発生しました。Right-click on the folder-->Properties-->Security


「タンゴダンサー」や「アブドゥルラーマン」に敬意を表します。フォルダを右クリック->プロパティ->スタンドアロンXP SP3システムでセキュリティが問題を解決しましたありがとうございました

3

これは複数のケースで発生する可能性があります。

  1. 完全な文字列パスが254文字より長い場合。
  2. コピーするファイル名が間違っている場合。
  3. ターゲットパスが間違っている場合。
  4. コピーされたファイルまたはターゲットフォルダーにreadonly属性が設定されている場合。

2

ファイルが別のインスタンスで開かれたため、このエラーが発生しました。

ファイルを閉じてソリューションを再ビルドすると、正常にコピーされました。


2

ビルドが完了した後、XCOPYの場合も同じ問題に直面しました。私の場合、フォルダに読み取り専用のアクセス許可が設定されているため、問題が発生していました。

XCOPYの前にattrib -Rコマンドを追加して、問題を解決しました。

それが誰かを助けることを願っています!


2

テストエンジンに関連してxcopyで同じエラーが発生しました。VisualStudio Professional 2013を使用しています。デフォルトでは、[テスト]-> [テスト設定]-> [テスト実行エンジンを実行し続ける]が、xcopyでエラーコード4が発生する理由のようです。スイッチを切ることで問題は解決しました。実行エンジンが一部の.dllを保持しているようです。


1

同じ問題がありました。VSの単純な「クリーンソリューション」はエラーをクリアしましたが、それは一時的なソリューションでした。


この問題が発生し、「クリーンソリューション」で解決できませんでした。「Clean Solution」はいつでも効果がありますか?
qxotk

1

ファイルの[出力ディレクトリにコピー]パラメーターを[常にコピー]に設定すると、ロックの問題が解決したようです。今はファイルのコピーが2つあるので、1つ削除する必要があります。


1

同じ問題がありました。しかし、私には何もうまくいきませんでした。追加して問題を解決しました

exit 0

私のコードに。問題は、ファイルのコピーを行っているときに、最後のファイルが見つからないことがあり、バットがゼロ以外の値を返すことでした。

これが誰かを助けることを願っています!


1

Windows 7以降を実行している場合は、新しい 'robocopy'コマンドを試すことができます。

robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)"

robocopyの詳細については、こちらをご覧ください


1

私は同じ問題に直面しました。ビルド後のイベントを削除したところ、機能し始めました。SQLコンポーネントを追加すると、ビルド後のコマンドも追加される場合があります。


1

/ excludeオプションを指定したxcopyを使用して、同じようなものを取得しています。私の場合、ビルド後のイベント(コマンドの後の改行のような無害なもの)を編集してプロジェクトを保存すると、エラーが発生することがわかりました。/ excludeオプションで指定されたファイルを再度保存すると、再び機能します。


1

DLLライブラリを作成しているときに、xcopyコマンドを使用して、プログラムがライブラリを見つけてロードできるライブラリをコピーしました。プログラムを数回開いたり閉じたりした後も、タスクマネージャーでまだ認識されていないオープンプロセスがありました。

ファイルが使用されている可能性のあるプロセスを探し、それを閉じます。


1

私のためにそれを修正したもの:あなたが望むプロジェクトの特定のソリューションに掘り下げてください、すなわちすべてのプロジェクトの全体的なソリューションファイルではありません。

やってみてください-私はここで述べた他のすべてを試しましたが、役に立ちませんでした。


1

これはWebアプリであることを示唆するものは何も表示されませんが、この問題を自分で経験しました-ビルド後のイベントで2つのxcopyコマンドがあり、そのうちの1つだけが失敗していました。何かがファイルをロックしていて、Visual Studioではありませんでした(再起動してみました)。

私が作成したDLLを使用する他の唯一のものはIISでした。そして見よ、

単純なのiisresetが私のためのトリックでした。


1

同じ問題がありました。これは、たとえば次のように同じフラグを2回持つことによって発生しました。

if $(ConfigurationName)== Release(xcopy "$(TargetDir) " "$(SolutionDir)Deployment \ $(ProjectName)\" / e / d / i / y / e)

「/ e」フラグが2回表示されることを確認します。重複を削除すると問題が解決しました。


1

私の場合、私$(OutDir)は単に..\..\Build\いくつかの相対パスでした。そして、次のようxcopy /y "$(OutDir)Proj1.dll" "Anypath\anyfolder\"にxcopyしようとすると 、終了コードエラー4が発生しました。

何が起こっていたか、このコマンドは$(OutDir)(私の場合はビルドフォルダー)自体で実行されていて、プロジェクトのcsprojファイルが配置されているディレクトリではありません(通常は予想されるとおり)。したがって、File not foundエラーが発生し続けました(終了コード4に対応)。

cdこれが実行されるディレクトリを出力するために、ビルド後のイベントで書き込むまで、これを理解することはできませんでした。

要約すると、からcopy/ xcopyファイルを作成する場合は$(OutDir)"$(TargetDir)"(出力ディレクトリの完全パス)を使用するか、パスをまったく指定する必要がありません。


0

共有フォルダを持つVMWare Workstationが原因である可能性があります

の宛先フォルダxcopyもVMの共有フォルダとしてマッピングされている場合、常に問題が発生します。

私はそれをvmで実行し、共有フォルダーのコンテンツを削除するスクリプトで解決しました。


0

rhughesの答えを拡張するには、

robocopyは、サブディレクトリを含めてサブディレクトリ/eを含めて空のディレクトリをコピーしたり/s、サブディレクトリを空のディレクトリを除外して含める必要がある場合に備えて、美しく機能します。

また、robocopyは、新しいファイルがコピーされた場合など、いくつかのことを報告します。0を超えるものは失敗であり、新しいファイルが見つかった場合、robocopyは1を返すため、VSは文句を言います。robocopyが最初にソース/宛先を比較し、更新された/新しいファイルのみをコピーすることは言及する価値があります。

この使用を回避するには:

(robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)") ^& IF %ERRORLEVEL% LEQ 4 exit /B 0

0

プロジェクトがビルドサーバーでのビルドに失敗したが、開発マシンで「手動」で正常にビルドしたため、ここにいる場合xcopy、デバッグと、開発マシンでの本番環境をエミュレートするためだけに実行している場合は、このソリューションでは:

https://stackoverflow.com/a/1732478/2279059

ビルドサーバーでビルド後のイベントをオフにするだけで、

msbuild foo.sln /p:PostBuildEvent=

ビルドサーバーで実行する必要がある他のビルド後のイベントがある場合、これは十分ではなく、一般的なソリューションではありません。ただし、この問題にはさまざまな原因があり、一般的な解決策はありません。この質問(およびその重複)に対する多くの回答の1つはおそらく役立つでしょうが、エラー処理を回避する方法(のようなxcopy /C)のみを回避するアプローチには注意してください。これらは、特にビルドサーバーシナリオでも機能する可能性がありますが、使用できる場合は、これの方が信頼性が高いと思います。

また、新しいバージョンのVisual Studioでは問題が発生しないことも示唆されているため、古いバージョンを使用している場合は、ビルドツールの更新を検討してください。


0

エラーコード4は多くのことを意味する可能性があるため、うまくいく解決策が見つかるまで、他の答えも読んで、なぜうまくいくかを理解することをお勧めします(一部の解決策は、エラー処理を無効にするだけで、問題を隠すだけでなく、それを解決します)。

これは、並列ビルドに関連するファイルロックの問題である可能性があります。回避策は、並列ビルドを使用しないことです。これはデフォルトの動作ですが、この-mオプションを使用している場合、プロジェクトは並行してビルドされます。次のバリエーションでは、プロジェクトを並行してビルドしないでください。そのため、ファイルロックの問題が発生することはありません。

msbuild -m:1
msbuild -maxcpucount:1
msbuild

ここで述べたこととは逆に、これはMSBuildの「最新」バージョン(Visual Studio 2019のビルドツールから)でも発生します。

おそらく、最善の解決策は、ビルド後の手順でファイルをコピーする必要がないことを確認することです。状況によっては、ビルドサーバーでMSBuildを使用してビルドするときに、ビルド後の手順を無効にすることもできます。https//stackoverflow.com/a/55899347/2279059

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