2014-01-19 10 views
5

PostBuild eventの中でローカル変数を使用したいのですが、内部の使い方を理解できませんでした。ビルド後のイベントでユーザー定義変数を使用する方法は?

set fold=$(TargetDir) 
if defined param (set fold=$(TargetDir)$(param)\) 
if not exist "%fold%" md "%fold%" 
copy /y "$(TargetPath)" "%fold%" 

ソリューションを構築する私が手::

msbuild PrePostBuildEvents.sln /p:param=ext 

... 

PostBuildEvent: 
    set fold=G:\prj\work\PrePostBuildEvents\bin\Debug\ 
    if defined param (set fold=G:\prj\work\PrePostBuildEvents\bin\Debug\ext\) 
    if not exist "%fold%" md "%fold%" 
    copy /y "G:\prj\work\PrePostBuildEvents\bin\Debug\PrePostBuildEvents.dll" "%fold%" 
    The file cannot be copied onto itself. 
      0 file(s) copied. 

私は%fold%を変更する場合はここに私のビルド後のイベントコマンド(paramは、MSBuildの/ pスイッチを通過させることができるという名前のパラメータがあります) $(fold)に、私は別の結果を得るが、それはまた間違っている:

PostBuildEvent: 
    set fold=G:\prj\work\PrePostBuildEvents\bin\Debug\ 
    if defined param (set fold=G:\prj\work\PrePostBuildEvents\bin\Debug\ext\) 
    if not exist "" md "" 
    copy /y "G:\prj\work\PrePostBuildEvents\bin\Debug\PrePostBuildEvents.dll" "" 
    The filename, directory name, or volume label syntax is incorrect. 
      0 file(s) copied. 

私が間違ってやっていますか?

+0

私はWindowsマシンの近くにいませんが、VSではプロジェクトプロパティにリソースタブがありますので、そこに定義すると思います。あなたは確認することができますか、後で私がWinマシンの近くにいるときにします – Mzf

+0

私はそこに定数文字列しか定義できないと思いますが、名前付きパラメータに依存する計算可能な文字列が必要です。 – stukselbax

答えて

1

まず、PostBuildイベントではなく、AfterBuild msbuildターゲットを使用します。これにより、msbuildは、実行しようとしていることと、正しく実行しようとしていることについてより多くの情報を得ることができます。理想的には、一度 http://msdn.microsoft.com/en-us/library/ms171459.aspx

を、あなたはそれをコンパイルをスキップし、それが何の仕事をしてはならない第二の時間を実行すると、一度のMSBuildを実行して周りのものをコピーするために悩まないできた。

環境変数はAfterBuildイベントで使用することができますファイルは既にそこにあります。

関連する問題