web-dev-qa-db-ja.com

デバッグビルド専用のVisual Studioポストビルドイベントを実行する方法

ビルド後のイベントを1種類のビルドに対してのみ実行するように制限するにはどうすればよいですか。 DLLをローカルのIIS仮想ディレクトリにコピーするためにイベントを使用していますが、リリースサーバーのビルドサーバーでこれが発生しないようにします。

556
JC.

ビルド前後のイベントはバッチスクリプトとして実行されます。あなたは$(ConfigurationName)上で条件文を実行することができます。

例えば

if $(ConfigurationName) == Debug xcopy something somewhere
695
Joseph Daigle

ちなみに、gotoを使う必要はありません。シェルIFコマンドは角括弧とともに使用できます。

if $(ConfigurationName) == Debug (
  copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
  copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
  echo "why, Microsoft, why".
)
493
gbjbaanb

通常どおりにポストビルドイベントを追加します。次に、プロジェクトを保存し、それをメモ帳(またはお気に入りのエディタ)で開き、PostBuildEventプロパティグループに条件を追加します。これが例です:

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
121
Franci Penov

代わりに(イベントはバッチファイルに入れられてから呼び出されるので)、以下を使用してください。 ([ビルド]イベントボックスで、バッチファイルではなく)

if $(ConfigurationName) == Debug goto :debug

:release
signtool.exe ....
xcopy ...

goto :exit

:debug
' debug items in here

:exit

こうすることで、任意の設定に対してイベントを作成し、それらをバッチファイルに渡す必要がなくなり、マクロで管理することができます。%1は$(OutputPath)などであることを覚えておいてください。

103
CestLaGalere

Visual Studio 2015:正しい構文は次のとおりです(1行にしてください)。

if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)

ここではエラー255はありません。

12

設定名をビルド後のスクリプトに渡し、そこで実行する必要があるかどうかを確認することができます。

設定名を$(ConfigurationName)で渡します

確認は、ビルド後の手順をどのように実装しているかに基づいて行われます。コマンドライン引数になります。

4
Lou Franco