ビルド後のイベントでMSB3073エラーが発生しましたが、どうすれば直せますか?

私は今プロジェクトに取り組んでいて、私のソリューションを構築することによって生成されたDLLをbinフォルダから別のフォルダにコピーすることを必要としています。xcopyを使用するバッチファイルを書きましたので、こちらをご覧ください。

xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.dll" "C:\inetpub\wwwroot\AppServer\bin\"
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.pdb" "C:\inetpub\wwwroot\AppServer\bin\"

さて、I'このファイルを何度も繰り返し試してみたところ、次のような場所にありました。

C:\Users\scogan\Desktop\CopyFiles.bat

ということで、ビルド後のイベントコマンドラインはこんな感じです。

call C:\Users\scogan\Desktop\CopyFiles.bat

このバッチファイルを、デスクトップ上のフォルダにある2つのテキストファイルと一緒に単独で実行したところ、問題なく動作しました。また、コピーしたいファイルをそのまま単独で実行したところ、これも問題なく動作しました。しかし、これをビルド後のイベントとして実行しようとすると、次のような出力が得られます。

1>  Organizr -> C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Client\bin\Debug\Organizr.exe
1>  File not found - Organizr.Services.dll
1>  0 File(s) copied
1>  0 File(s) copied
1>  File not found - Organizr.Services.pdb
1>c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "call C:\Users\scogan\Desktop\CopyFiles.bat" exited with code 4.

調べてみたところ、エラーコード4は「初期化エラーが発生しました。メモリやディスク容量が足りないか、コマンドラインで無効なドライブ名を入力したか、無効な構文を入力したかです。

MSB3073が何なのかも調べましたが、あまり役に立ちそうなものは見つかりませんでした。そこで質問なのですが、私は何を間違えているのでしょうか?絶対パスがそれを台無しにしているのでしょうか?どんな助けでも感謝します。

ソリューション

プロジェクトのプロパティをいろいろと試してみたところ、プロジェクトのビルド順序が問題であることがわかりました。コピーしたいファイルを生成したプロジェクトは2番目にビルドされましたが、ビルド後のイベントとしてバッチファイルを実行していたプロジェクトは1番目にビルドされました。皆さん、ご協力ありがとうございました。

解説 (1)

AfterBuild ターゲットの MsBuild "Copy"タスクを、ポストビルド イベントより優先します。

プロジェクトファイルにこのTargetを追加し、PostBuildEventを削除してください。



解説 (6)

参考までに、私の場合は copy コマンドで '/' をディレクトリの区切り文字として使っていたことが原因でした。バックスラッシュを使用する必要があります。

解説 (0)

私の場合、プロジェクトを構築して作成していたdllは、バックグラウンドで使用されていました。 アプリケーションを終了した後、xcopyは期待どおりに正常に動作しました。

解説 (1)

これは遅すぎますが、後でそれを見る人のために私の経験を投稿してください:-。

MS VS 2010でも同じ問題がありました。 スペースを含むビルドコピーコマンドargsを投稿するための引用符を付けることで解決しました。!

`プロジェクトプロパティ->構成プロパティ-->イベントのビルド-->ビルド後のイベント-->コマンドラインの変更:

コピー$(ProjectDir)a \ b \ c $(OutputPath)

に。

コピー "$(ProjectDir)a \ b \ c" "$(OutputPath)"

解説 (0)

指定されたエラーは、ビルド後のイベントに関連しています。 どういうわけか、VSツールはファイルを宛先フォルダーにコピーできません。 それには多くの理由があります。 正確なエラーの原因を確認するには、ツール>に移動します。オプション>プロジェクトとソリューション>ビルドして実行し、「 MsBuildプロジェクトビルド出力冗長性」を「診断」に変更します。 実際の問題を検出するのに十分な情報が提供されます。

解説 (1)

アフタービルドを正しいプロジェクトに入れた後でも問題が解決しない場合は、xcopyの代わりに「コピー」を使用してみてください。 これは私のために働いた。

解説 (0)

インポートされたプロジェクトのビルド後のイベント(ビルドイベントの下、プロパティダイアログ)には、定義されていない環境変数がありました。
。 「コントロールパネル\すべてのコントロールパネルアイテム\システム\高度なシステム設定」に移動して、適切な環境変数を追加し、これ以上実行しないに、VS2017を再起動するとエラーが解決しました。
。 また、@ Seansと複数のプロジェクトレース/コンテンツに関するその他の回答に続いて、出力フォルダにtempフォルダを作成します。

。![そう](https://i.stack.imgur.com/4SC6F.jpg。)

優先出力を生成するプロジェクトを選択します。

。![ここに画像の説明を入力してください](https://i.stack.imgur.com/j9X3Y.jpg。)

ビルド(再構築/クリーンなし)は迅速なソリューションです。

解説 (0)

次に、コピーコマンドで問題に直面した場合は、コピーコマンドを実行する前に実行する必要があります。

1。 管理者としてソリューションを開き、ソリューションを構築します。 2。 「0ファイルのコピー」などの問題がある場合は、ソースと宛先パスを確認してください。 間違ったパスを使用している可能性があります。 「コマンドプロンプト」で同じコマンドを実行して、正常に動作しているかどうかを確認することをお勧めします。

解説 (0)

私は次のことをすることでそれを解決しました:

ビジュアルスタジオで「プロジェクト->プロジェクト依存関係」。

XXX.Testソリューションを選択し、 XXX.Testソリューションの post-buildイベントがこのエラーを生成しないようにすることは XXXソリューションにも依存することを伝えました( code 4で終了します) )。

解説 (0)

複数のプロジェクトを並行して構築していて、1つ以上のプロジェクトが同じファイルをコピーしようとして、不定期のエラーが発生するレース条件を作成しているときに問題が発生することがわかりました。 それを解決する方法?

上記だけで状況を変えるだけで問題を解決できる人もいるので、多くのオプションがあります。 より堅 ⁇ なソリューションになります。..

-コピーされるファイルを制限します。 xcopy $(TargetDir)*の代わりに。* "。.. 代わりに xcopy "$(TargetDir)$(TargetName)を実行します。* "。..

-エラーをキャッチして再試行します。

。 :ループ。 xcopy / Y / R / S / J / Q "$(TargetDir)$(TargetName)。*「どこか」。 ErrorLevel 1 gotoループの場合。

-xcopyの代わりにロボコピーを使用します。

-ビルド時間が長くなるため、おそらくこれを行いたくないでしょうが、並列プロジェクトビルドの最大数を 1 に減らすことができます。 ...

。![ここに画像の説明を入力してください](https://i.stack.imgur.com/hzrZZ.png。)

解説 (0)

テストプロジェクトにも同じ問題がありました。 ポストビルドイベントが機能していない理由を見つけました。これは、$(ProjectName).exeコマンドを実行する前にファイルをコピーしていて、これらのファイルの一部がテストプロジェクト自体に必要だったためです。 したがって、最初のコマンドとして$(ProjectName).exeを移動するだけで問題が解決します。

解説 (0)