113

ビルド後のイベントがあるプロジェクトがあります。

copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe  $(TargetDir)

私のマシンでは毎回正常に動作します。「コード 1 で終了しました」というエラーが常に発生する新しい開発者がいます。彼女に DOS プロンプトで同じコマンドを実行させたところ、問題なく動作しました。何が原因でしょうか? 実際のエラーに到達する方法はありますか?

どちらも Visual Studio 2008 を使用しています。

4

19 に答える 19

119

彼女は、パス内のフォルダー名の 1 つにスペースがあり、その周りに引用符がありませんでした。

于 2008-11-21T21:52:13.697 に答える
60

「Pings」のあるものは私を助けました...しかしもう少しよく説明されるかもしれません...

私にとっての解決策は変更することでした:

copy $(TargetDir)$(TargetName).* $(SolutionDir)bin

これに:

copy "$(TargetDir)$(TargetName).*" "$(SolutionDir)bin"

それがあなたのために働くことを願っています。:-)

于 2010-02-18T19:51:26.973 に答える
56

これは非常に活発な質問であるため、将来の訪問者のためにこれを追加しました.

ROBOCOPY は、8 未満の「成功コード」で終了します。参照: http://support.microsoft.com/kb/954404

この意味は:

robocopy exit code 0 = no files copied
robocopy exit code 1 = files copied
When the result is 1, this becomes an error exit code in visual studio.

だから私はこれをバッチファイルの一番下に追加することでこれを簡単に解決しました

exit 0

この方法で ROBOCOPY エラーを処理することを提案します

rem each robocopy statement and then underneath have the error check.
if %ERRORLEVEL% GEQ 8 goto failed

rem end of batch file
GOTO success

:failed
rem do not pause as it will pause msbuild.
exit 1

:success
exit 0    

ファイルがコピーされない場合、混乱が生じます = VS でエラーは発生しません。次に、変更があると、ファイルがコピーされ、VS エラーが発生しますが、開発者が望んでいたことはすべて行われました。

追加のヒント: VS ビルドで無期限の一時停止になるため、スクリプトで一時停止を使用しないでください。スクリプトの開発中に、次のようなものを使用しますtimeout 10。ぶら下がっているビルドではなく、これに気づき、コメントアウトします。

于 2012-05-04T01:52:45.500 に答える
47

コード 1 の理由は、ターゲット フォルダーが読み取り専用だったからです。これが誰かを助けることを願っています! あるディレクトリから別のディレクトリにコピーするビルド後のイベントがあり、コピー先は読み取り専用でした。そのため、ディレクトリとそのすべてのサブディレクトリの読み取り専用属性のチェックを外しました! 安全なディレクトリであることを確認してください。

于 2010-12-27T22:01:36.353 に答える
11

SysInternals からプロセス モニターを取得 して、Lunaverse.DbVerse (パス フィールド) を監視するように設定し、操作結果を確認します。何が悪かったかはそこから明らかなはずです

于 2008-11-21T20:50:34.803 に答える
8

OSで保護された「..\Common7 \ IDE \ PrivateAssemblies」へのビルド後のコピーを機能させるには、管理者としてVSを実行する必要がありました。

于 2012-04-30T21:31:42.240 に答える
5

Project -> PropertiesからBuild Events ( Pre-build event command lineまたはPost-build event command line ) で' copy 'コマンドを使用する場合: ' copy ' コマンド パラメータは次のようになります。引用符を使用することを忘れないでください (アドレス文字列内のスペースの問題を避けるため)。copy "source of files" "destination for files"

于 2012-12-27T14:13:12.717 に答える
3

わかりました、これは多くの解決策の問題です。そのため、私の投稿を投稿して、人々により多くのヒントを提供します。私の状況は、パス内のフォルダーを再確認し、それらすべてがマシンに存在することを確認することです。例: 「$(SolutionDir)\partBin\Bin\$(ProjectName).pdb」ですが、「Bin」は partBin フォルダーにありません。

于 2014-08-28T13:59:29.547 に答える
3

Visual Studio を管理者として実行することで、コード 1 を修正できました。どうやら、管理者なしでシェル コマンドを実行するためのアクセス権がありませんでした。

于 2014-08-19T17:45:48.947 に答える
2

同じエラーが発生しました。エスケープする必要のある宛先パスに%がありました

c:\projects\%NotAnEnvironmentVariable%

する必要がありました

c:\projects\%%NotAnEnvironmentVariable%%
于 2012-12-01T18:26:12.777 に答える
2

私にとっては、ファイルをコピーしていたプログラムがその時点で実行されていないことを確認する必要がありました。構文にエラーはありませんでした。これが誰かに役立つことを願っています。

于 2011-07-18T14:18:04.733 に答える
2

[プロジェクト] -> [プロパティ] からビルド イベント (ビルド前のイベントのコマンド ラインまたはビルド後のイベントのコマンド ライン) で 'copy' コマンドを使用する場合: ターゲット フォルダーが存在する必要があります。

于 2016-03-21T14:51:01.103 に答える
2

良い習慣として、ポスト ビルド イベントをMS ビルド ファイル コピー タスクに置き換えることをお勧めします。

于 2008-11-21T21:58:28.443 に答える
0

これと同じ問題があり、プロジェクトの名前を変更したことが原因であることが判明しました。私はプロジェクトのプロパティに入り、アセンブリ名とルート名前空間をプロジェクト名に変更しました。その後はうまくいきました!

于 2015-07-06T15:43:11.637 に答える