私は今プロジェクトに取り組んでいて、私のソリューションを構築することによって生成された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が何なのかも調べましたが、あまり役に立ちそうなものは見つかりませんでした。そこで質問なのですが、私は何を間違えているのでしょうか?絶対パスがそれを台無しにしているのでしょうか?どんな助けでも感謝します。
AfterBuild ターゲットの MsBuild "Copy"タスクを、ポストビルド イベントより優先します。
プロジェクトファイルにこのTargetを追加し、PostBuildEventを削除してください。
<Target Name="AfterBuild">
<Copy SourceFiles="C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.*"
DestinationFolder="C:\inetpub\wwwroot\AppServer\bin\"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</Target>
これは遅すぎますが、後でそれを見る人のために私の経験を投稿してください:-。
MS VS 2010でも同じ問題がありました。 スペースを含むビルドコピーコマンドargsを投稿するための引用符を付けることで解決しました。!
`プロジェクトプロパティ->構成プロパティ-->イベントのビルド-->ビルド後のイベント-->コマンドラインの変更:
コピー$(ProjectDir)a \ b \ c $(OutputPath)
。
に。
コピー "$(ProjectDir)a \ b \ c" "$(OutputPath)"
。
インポートされたプロジェクトのビルド後のイベント(ビルドイベントの下、プロパティダイアログ)には、定義されていない環境変数がありました。
。
「コントロールパネル\すべてのコントロールパネルアイテム\システム\高度なシステム設定」に移動して、適切な環境変数を追加し、これ以上実行しないに、VS2017を再起動するとエラーが解決しました。
。
また、@ Seansと複数のプロジェクトレース/コンテンツに関するその他の回答に続いて、出力フォルダにtempフォルダを作成します。
。。
優先出力を生成するプロジェクトを選択します。
。。
ビルド(再構築/クリーンなし)は迅速なソリューションです。
私は次のことをすることでそれを解決しました:
ビジュアルスタジオで「プロジェクト->プロジェクト依存関係」。
XXX.Test
ソリューションを選択し、 XXX.Test
ソリューションの post-build
イベントがこのエラーを生成しないようにすることは XXX
ソリューションにも依存することを伝えました( code 4
で終了します) )。
複数のプロジェクトを並行して構築していて、1つ以上のプロジェクトが同じファイルをコピーしようとして、不定期のエラーが発生するレース条件を作成しているときに問題が発生することがわかりました。 それを解決する方法?
上記だけで状況を変えるだけで問題を解決できる人もいるので、多くのオプションがあります。 より堅 ⁇ なソリューションになります。..
-コピーされるファイルを制限します。 xcopy $(TargetDir)*の代わりに。* "
。.. 代わりに xcopy "$(TargetDir)$(TargetName)を実行します。* "
。..
-エラーをキャッチして再試行します。
。 :ループ。 xcopy / Y / R / S / J / Q "$(TargetDir)$(TargetName)。*「どこか」。 ErrorLevel 1 gotoループの場合。
。
-xcopyの代わりにロボコピーを使用します。
-ビルド時間が長くなるため、おそらくこれを行いたくないでしょうが、並列プロジェクトビルドの最大数を 1 に減らすことができます。 ...
。。