ビルド前イベントを活用する、その6
ビルド前イベントにおいて独自のツールに引数を与えてみましょう。
下記のようなソースコードを書いてみました。実行時の引数に "continue" を指定したときだけビルドを開始します。実行時引数がないときや、"stop" や、未定義の文字列を取得したときはビルドをしません。
using System;
namespace tool
{
internal class Program
{
// デフォルトだと戻り値は void だが、これを int にする.
static int Main( string [] args )
{
if ( args.Length == 0 )
{
Console.WriteLine( "Error: args.Length == 0." );
return -1; // ビルドをしない.
}
// 実行時引数を取得する.
String str = args[0];
// 小文字にする.
str = str.ToLower();
// 引数を評価する.
if ( str.Equals( "continue" ))
{
Console.WriteLine( "continue." );
return 0; // ビルドを開始する.
}
else if ( str.Equals( "stop" ))
{
Console.WriteLine( "stop." );
return -1; // ビルドをしない.
}
else
{
Console.WriteLine( $"Error: args[0] is {args[0]}." );
return -1; // ビルドをしない.
}
}
}
}
ビルド前イベントのスクリプトでは call "実行ファイルパス" ”実行時引数” という形で実行します。
実行時引数が無いとき
echo プリビルドスクリプトを開始します.
call "$(ProjectDir)tool.exe"
echo プリビルドスクリプトが完了しました.
リビルドを開始しました...
1>------ すべてのリビルド開始: プロジェクト:aaa, 構成: Debug Any CPU ------
1> プリビルドスクリプトを開始します.
1>EXEC : error : args.Length == 0.
1> プリビルドスクリプトが完了しました.
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: コマンド "echo プリビルドスクリプトを開始します.
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: call "C:\tmp\sss\aaa\tool.exe"
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: echo プリビルドスクリプトが完了しました." はコード -1 で終了しました。
========== すべて再構築: 0 正常終了、1 失敗、0 スキップ ==========
========== リビルド は 21:08 に開始され、00.234 秒 かかりました ==========
実行時引数を continue にしたとき
echo プリビルドスクリプトを開始します.
call "$(ProjectDir)tool.exe" "continue"
echo プリビルドスクリプトが完了しました.
ビルドを開始しました...
1>------ ビルド開始: プロジェクト: aaa, 構成: Debug Any CPU ------
1> プリビルドスクリプトを開始します.
1> continue.
1> プリビルドスクリプトが完了しました.
1> aaa -> C:\tmp\sss\aaa\bin\Debug\aaa.exe
========== ビルド: 成功 1、失敗 0、最新の状態 1、スキップ 0 ==========
========== ビルド は 21:18 に開始され、00.406 秒 かかりました ==========
実行時引数を stop にしたとき
echo プリビルドスクリプトを開始します.
call "$(ProjectDir)tool.exe" "stop"
echo プリビルドスクリプトが完了しました.
ビルドを開始しました...
1>------ ビルド開始: プロジェクト: aaa, 構成: Debug Any CPU ------
1> プリビルドスクリプトを開始します.
1> stop.
1> プリビルドスクリプトが完了しました.
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: コマンド "echo プリビルドスクリプトを開始します.
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: call "C:\tmp\sss\aaa\tool.exe" "stop"
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: echo プリビルドスクリプトが完了しました." はコード -1 で終了しました。
========== ビルド: 成功 0、失敗 1、最新の状態 1、スキップ 0 ==========
========== ビルド は 21:11 に開始され、00.193 秒 かかりました ==========
実行時引数を hoge にしたとき
echo プリビルドスクリプトを開始します.
call "$(ProjectDir)tool.exe" "hoge"
echo プリビルドスクリプトが完了しました.
ビルドを開始しました...
1>------ ビルド開始: プロジェクト: aaa, 構成: Debug Any CPU ------
1> プリビルドスクリプトを開始します.
1>EXEC : error : args[0] is hoge.
1> プリビルドスクリプトが完了しました.
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: コマンド "echo プリビルドスクリプトを開始します.
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: call "C:\tmp\sss\aaa\tool.exe" "hoge"
1>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1396,5): error MSB3073: echo プリビルドスクリプトが完了しました." はコード -1 で終了しました。
========== ビルド: 成功 0、失敗 1、最新の状態 1、スキップ 0 ==========
========== ビルド は 21:12 に開始され、00.255 秒 かかりました ==========