私たちの制御システムには、特定のバージョンを持つ多くのデータ ファイルがあります。データ ファイルは「追加のみ」であるため、新しいバージョンには常に、以前のバージョンの定義のスーパーセットが含まれます。
コード内の「マジック ナンバー」を回避するために、データの一部を取得して C# クラス ファイルに変換するコード ジェネレーターを作成しました。私は、そのようなファイルだけをほとんど含むかなり大きなクラス ライブラリを持っています。これにより、コードがはるかに読みやすくなり、コンパイラ チェックが追加されます。これは、以前はリスクが高かった型キャストが生成されたコードの一部になり、ライブラリのユーザーが正しいサブタイプを直接使用できるようになったためです。
ただし、最新バージョンのクラス ライブラリで使用されたデータ ファイルのバージョンは何かという疑問が生じます。すべてのクラス ファイルがグローバル リストに「貢献」するようにしたいと考えています。静的コンストラクターが自動的に実行される場合は、次のようにします。
// GlobalConstants.cs (not generated)
public static partial class GlobalConstants
{
public static List<string> Lst = new List<string>();
static void AddVersionInfo(string mod)
{
Lst.Add(mod);
}
}
// Motor.cs
public static partial class GlobalConstants
{
// Generated from Motor metadata
public class MotorUtil
{
public const int SomeConst1 = 2;
static MotorUtil()
{
AddVersionInfo("<Motor version info>");
}
}
}
// Tank.cs
public static partial class GlobalConstants
{
// Generated from Tank metadata
public class TankUtil
{
public const int SomeConst1 = 2;
public const int SomeConst2 = 3;
public const int SomeConst3 = 5;
static TankUtil()
{
AddVersionInfo("<Tank version info>");
}
}
}
静的コンストラクターが自動的に実行される場合、生成されたすべてのファイル (tank.cs、motor.cs、boiler.cs など) がリストに追加され、ツールによって検査される可能性があります。
必要に応じて、コンパイル時の MEF。
不運にも。「Lst」の内容を出力すると、静的コンストラクターが実行されていないため、常に空のリストになります。
これらの .cs ファイルはさまざまな関係者から提供されており、GlobalConstants.cs の作成者はそれらについて知る必要はありません。私の質問は次のとおりです。このコードを生成して、生成された.csファイルを自由に追加して「Lst」リストに表示する方法はありますか?