38

私のソリューションをビルドすることによって生成された DLL を bin フォルダーから別のフォルダーにコピーする必要があるプロジェクトに取り組んでいます。どちらも私のコンピューターの C ドライブにあります。これを実現するために 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\"

ここで、次の場所にあるこのファイルを何度も繰り返してみました。

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 とは何かを調べましたが、そこで役立つ情報はあまり見つかりませんでした。だから、私の質問は、私が間違っていることは何ですか? 絶対パスはそれを台無しにしていますか? ここで何か助けていただければ幸いです。

4

14 に答える 14

32

さまざまなプロジェクト プロパティをいじってみると、プロジェクトのビルド順序が問題であることがわかりました。コピーしたいファイルを生成したプロジェクトは2 番目にビルドされましたが、ビルド後のイベントとしてバッチ ファイルを実行していたプロジェクトが1番目にビルドされたので、代わりにビルド イベントを 2 番目のプロジェクトにアタッチしただけで機能します。大丈夫。でも、皆さん、助けてくれてありがとう。

于 2013-06-13T13:33:56.080 に答える
11

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

于 2015-09-07T00:23:48.057 に答える
6

私の場合、プロジェクトをビルドして作成していた dll がまだバックグラウンドで使用されていました。アプリケーションを強制終了すると、xcopy は期待どおりに機能しました。

于 2016-11-01T05:03:27.797 に答える
1

after ビルドを正しいプロジェクトに配置しても問題が解決しない場合は、xcopy の代わりに「copy」を使用してみてください。これは私にとってはうまくいきました。

于 2016-10-05T16:52:38.943 に答える
0

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

于 2016-10-13T02:59:44.197 に答える