ビルド前イベントを活用する、その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 秒 かかりました ==========