ポストビルドイベントを含むプロジェクトがあります。
copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe $(TargetDir)
私のマシンでは毎回問題なく動作します。 「exited with code 1」エラーが常に発生する新しい開発者がいます。私は彼女にDOSプロンプトで同じコマンドを実行させましたが、それはうまくいきました。これは何が原因ですか?実際のエラーに到達する方法はありますか?
どちらもVisual Studio 2008を使用しています。
彼女は、パス内のフォルダー名の1つにスペースがあり、その周りに引用符がありませんでした。
「Ping」のあるものは私を助けてくれました...しかし、少し良く説明されるかもしれません...
私にとって解決策は変更することでした:
copy $(TargetDir)$(TargetName).* $(SolutionDir)bin
これに:
copy "$(TargetDir)$(TargetName).*" "$(SolutionDir)bin"
それがあなたのために働くことを願っています。 :-)
コード1の私の理由は、ターゲットフォルダーが読み取り専用であったことです。これが誰かを助けることを願っています!あるディレクトリから別のディレクトリにコピーするためのビルド後イベントがあり、宛先は読み取り専用でした。そこで、ディレクトリとそのすべてのサブディレクトリの読み取り専用属性のチェックを外しました!そのディレクトリが安全であることを確認してください!
これはかなり活発な質問なので、将来の訪問者のためにこれを追加しました。
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
のようなものを使用します。これに気づき、ビルドがハングするのではなくコメントアウトされます。
Get SysInternalsからのプロセスモニター 設定して、Lunaverse.DbVerse(Pathフィールド上)が操作結果を監視するようにします。そこから何が悪かったのかが明らかなはずです
VSを管理者として実行して、ビルド後のOSが動作するOS保護された「..\Common7\IDE\PrivateAssemblies」にコピーを取得する必要がありました。
ビルドイベントで「コピー」コマンドを使用する場合は、(ビルド前イベントコマンドラインまたは/およびビルド後イベントコマンドライン)from Project-> Properties:you 'copy'コマンドパラメータは次のようになります:copy "source of files" "destination for files"
。引用符を使用することを忘れないでください(アドレス文字列のスペースに関する問題を回避するため)。
同様の問題がありましたが、特にJenkinsビルド環境で発生しました。この問題を解決するために、ビルド後のイベントでコピーコマンドを使用することから、コピーターゲットを使用することに切り替えました。
これを変更しました:
<PropertyGroup>
<PostBuildEvent>copy $(ProjectDir)bin\BLAH.Common.xml $(ProjectDir)App_Data\BLAH.Common.xml</PostBuildEvent>
</PropertyGroup>
これに:
<Target Name="AfterBuild">
<Copy SourceFiles="$(ProjectDir)bin\BLAH.Common.xml" DestinationFolder="$(ProjectDir)App_Data\" />
</Target>
そして、今はうまく動作します。
私が得ていた特定のエラーは:
(PostBuildEvent target) ->
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "copy <http://1.2.3.4/job/BLAHv2/ws/Api/bin/BLAH.Common.xml> <http://1.2.3.4/job/BLAHv2/ws/Api/App_Data/BLAH.Common.xml"> exited with code 1. [<http://1.2.3.4/job/BLAHv2/ws/Api/Api.csproj]>
Visual Studioを管理者として実行して、コード1を修正できました。どうやら、管理者なしでシェルコマンドを実行するためのアクセス権がなかったようです。
私にとっては、ファイルをコピーするプログラムがその時点で実行されていなかったことを確認する必要がありました。構文にエラーはありませんでした。これが誰かを助けることを願っています。
良い習慣として、ポストビルドイベントを MSビルドファイルコピータスク に置き換えることをお勧めします。
わかりました、これは多くの解決策の問題ですので、私は人々にもっとヒントを与えるために私のものを投稿しました。私の状況は、パス内のフォルダーを再確認し、それらがすべてマシンに存在することを確認することです。たとえば、「$(SolutionDir)\ partBin\Bin\$(ProjectName).pdb」ですが、「Bin」はpartBinフォルダーにありません。
プロジェクト->プロパティからビルドイベント(ビルド前のイベントコマンドラインまたはビルド後のイベントコマンドライン)で「コピー」コマンドを使用する場合:ターゲットフォルダーが存在する必要があります
同じエラーを受け取りました。エスケープする必要がある宛先パスに%がありました
c:\projects\%NotAnEnvironmentVariable%
する必要がありました
c:\projects\%%NotAnEnvironmentVariable%%
さらに別の答え...
私の場合、.Net Standard 1.3と.Net Framework 2.0の両方を対象としたVisual Studio 2017プロジェクトがありました。これは、次のように.csprojファイルで指定されました。
<TargetFrameworks>netstandard1.3;net20</TargetFrameworks>
次のようなビルド後のイベントコマンドラインもありました。
copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"
つまり、ビルドによって生成された.Net Framework .dllを別の場所にコピーしようとしていました。
再構築を行ったとき、これはこのエラーで失敗していました:
MSB3073 The command "copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"" exited with code 1.
多くのフラストレーションの後、私は最終的に、Rebuildがすべての出力ファイルを削除し、.Net Standard 1.3のビルドを実行し、ビルド後のイベントコマンドラインを実行しようとしたことを決定しました。まだ構築されていません。
そのため、解決策は、ビルドの順序を変更することでした。つまり、最初に.Net Framework 2.0をビルドし、次に.Net Standard 1.3をビルドします。
<TargetFrameworks>net20;netstandard1.3</TargetFrameworks>
これで、ビルド後のイベントコマンドラインが2回実行され、ファイルが2回コピーされるという軽微な不具合が発生します。
私の場合、batファイル内には相対パスを指定したコピー操作があったため、batファイルを呼び出す前にcd
(ディレクトリを変更)する必要がありました。
:: Copy file
cd "$(ProjectDir)files\build_scripts\"
call "copy.bat"
私はこれと同じ問題を抱えていましたが、プロジェクトの名前を変更したことが原因であることがわかりました。プロジェクトのプロパティに移動し、Assembly NameとRoot Namespaceをプロジェクト名に変更しましたが、その後はうまく機能しました!
非常に多くのソリューション...
私の場合、batファイルを非Unicode(Western、Windows)エンコードで保存する必要がありました。デフォルトでは、Visual Studioにファイルを追加したときに(そしておそらくVSの外部で行う必要がありました)、UTF-8エンコーディングで追加しました。