web-dev-qa-db-ja.com

Visual Studioポストビルディングイベント - 相対ディレクトリの場所へのコピー

ビルドが成功したら、出力ディレクトリの内容を同じ"base"フォルダの下の別の場所にコピーします。この親フォルダは相対的な部分であり、ソース管理の設定によって異なります。

利用可能なマクロ値をいくつかリストしました。

$(SolutionDir)= D:\ GlobalDir\Version\AppName\Solution1\build

$(ProjectDir)= D:\ GlobalDir\Version\AppName\Solution1\Version\ProjectA \

Output Dirの内容を次のフォルダにコピーします。

D:\ GlobalDir\Version\AppName\Solution2\Project\Dependency

ベースロケーション "D:\ GlobalDir\Version\AppName"は、上記のマクロのいずれかから取得する必要があります。ただし、どのマクロ値もリストされていないのみ親の場所。

どのようにしてonlyビルド後コピーコマンドのベースロケーションを抽出できますか?

208
Preets

TargetDirや他のマクロが正しい場所を指していない場合は、 ".."ディレクトリを使用してフォルダ階層を上に移動します。

すなわち。ベースディレクトリを取得するには$(SolutionDir)\..\..を使用してください。


すべてのマクロのリストについては、こちらを参照してください。

http://msdn.Microsoft.com/ja-jp/library/c02as0cs.aspx

172
gbjbaanb

これがプロジェクトのビルド後イベントコマンドラインに追加したいものです。

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"

編集:またはあなたのターゲット名がプロジェクト名と異なる場合。

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
262
Lucas B

あなたが試すことができます:

$(SolutionDir)..\..\
39
ichiban

これは関係していると思いますが、msbuildコマンドラインを使って(バッチファイルから)直接ビルドするのではなく、VS内からビルドするのに問題がありました。

次のようなものを使う:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(注:コピーを妨げるパーミッションの問題を回避するために使用されていたXCOPYではなくstart XCOPY

バッチファイルからmsbuildを実行すると、マクロ$(SolutionDir)..\に評価され、その結果XCOPYコマンドが失敗しました。それ以外の場合は、Visual Studio内から構築した場合は正常に機能しました。評価された出力を見るために/verbosity:diagnosticを使用することを確認しました。

代わりにマクロ$(ProjectDir)..\を使用しても同じ結果が得られますが、どちらのビルドシナリオでも完全に機能します。

10
drzaus

Msbuildを直接使用するのは意味がありませんか?すべてのビルドでこれを実行しているのであれば、最後にmsbuildタスクを追加できますか? Visual Studio IDEに表示されていない別のマクロ値が見つからないかどうかを確認するには、msbuildオプションをdiagnosticに切り替えて、使用可能なすべての変数を表示します。現在の価値だけでなく。

ビジュアルスタジオでこれをオンにするには、Tools/Optionsに行き、ツリービューをProjects and Solutionsというセクションまでスクロールして展開し、Build and Runをクリックします。右側には、ビルド出力の詳細度を指定するドロップダウンがあります。これをdiagnosticに設定すると、他にどのようなマクロ値を使用できるかがわかります。

どのレベルにしたいのか、そしてどの程度複雑にしたいのか私にはよくわからないので、これはあなたにいくつかのアイデアを与えるかもしれません。私は最近、ビルドの一部としてSQLコードを実行するビルドスクリプトをやっています。もっと手助けしたい、あるいはいくつかのサンプルビルドスクリプトが欲しいなら、私に知らせてください。しかし、それがビルドの終わりに実行したい小さなプロセスであるならば、おそらく完全なmsbuildスクリプトを実行するのはちょっとやり過ぎです。

それがRihanに役立つことを願っています

4
Rihan Meij