ビルド後のイベントを1種類のビルドに対してのみ実行するように制限するにはどうすればよいですか。 DLLをローカルのIIS仮想ディレクトリにコピーするためにイベントを使用していますが、リリースサーバーのビルドサーバーでこれが発生しないようにします。
ビルド前後のイベントはバッチスクリプトとして実行されます。あなたは$(ConfigurationName)
上で条件文を実行することができます。
例えば
if $(ConfigurationName) == Debug xcopy something somewhere
ちなみに、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".
)
通常どおりにポストビルドイベントを追加します。次に、プロジェクトを保存し、それをメモ帳(またはお気に入りのエディタ)で開き、PostBuildEventプロパティグループに条件を追加します。これが例です:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
代わりに(イベントはバッチファイルに入れられてから呼び出されるので)、以下を使用してください。 ([ビルド]イベントボックスで、バッチファイルではなく)
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' debug items in here
:exit
こうすることで、任意の設定に対してイベントを作成し、それらをバッチファイルに渡す必要がなくなり、マクロで管理することができます。%1は$(OutputPath)などであることを覚えておいてください。
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はありません。
設定名をビルド後のスクリプトに渡し、そこで実行する必要があるかどうかを確認することができます。
設定名を$(ConfigurationName)で渡します
確認は、ビルド後の手順をどのように実装しているかに基づいて行われます。コマンドライン引数になります。