ビルド前イベントを活用する、その5

ビルド前イベントにおいて独自のツールで 0 以外の値を戻すとビルドを中止させることができます。

下記のようなソースコードのツールを書いてみました。現在の年月日時分秒の秒数が偶数のときは return 0; 奇数のときは return -1; にします。つまり現在の秒数が奇数の場合はビルドをさせないようにできます。

using System;

namespace tool
{
	internal class Program
	{
		// デフォルトだと戻り値は void だが、これを int にする.
		static int Main( string [] args )
		{

			DateTime dtm = DateTime.Now;

			int y4 = dtm.Year;
			int m2 = dtm.Month;
			int d2 = dtm.Day;
			int hh = dtm.Hour;
			int mm = dtm.Minute;
			int ss = dtm.Second;

			const String FMT = "{0:d4}/{1:d2}/{2:d2}_{3:d2}:{4:d2}:{5:d2}";
			String str = String.Format( FMT, y4, m2, d2, hh, mm, ss );

			Console.WriteLine( str );

			// 秒数が偶数のときは 0 を戻し、秒数が奇数の時は -1 を戻す.
			if (( ss % 2 ) == 0 )
			{
				return 0;
			}
			else
			{
				return -1;
			}

		}
	}
}

実行スクリプトは下記のようにします。

echo プリビルドスクリプトを開始します.
call "$(ProjectDir)tool.exe"
echo プリビルドスクリプトが完了しました.

現在の秒数が偶数のとき

現在の秒数が偶数のときは下記のような結果になります。秒数が 40 の偶数で tool.exe からは0が戻ってくるのでビルドも実行されます。

リビルドを開始しました...
1>------ すべてのリビルド開始: プロジェクト:aaa, 構成: Debug Any CPU ------
1>  プリビルドスクリプトを開始します.
1>  2025/05/21_22:35:40
1>  プリビルドスクリプトが完了しました.
1>  aaa -> C:\tmp\sss\aaa\bin\Debug\aaa.exe
========== すべて再構築: 1 正常終了、0 失敗、0 スキップ ==========
========== リビルド は 22:35 に開始され、00.395 秒 かかりました ==========

現在の秒数が奇数のとき

現在の秒数が奇数のときは下記のような結果になります。秒数が 39 の奇数で tool.exe から -1 が戻ってきたということが示されており、ビルドが実行されていません。

リビルsドを開始しました...
1>------ すべてのリビルド開始: プロジェクト:aaa, 構成: Debug Any CPU ------
1>  プリビルドスクリプトを開始します.
1>  2025/05/21_22:36:39
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 スキップ ==========
========== リビルド は 22:36 に開始され、00.230 秒 かかりました ==========