私はこのようなセットアップでコードに遭遇しました:
internal class Something
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
internal static class Factory
{
public static string Name { get; set; }
public static Something Create()
{
return new Something { Name = Name };
}
}
internal static class Resources
{
public static readonly Something DefaultSomething = Factory.Create();
}
internal class Program
{
public static void Main(string[] args)
{
Factory.Name = "MyFactory";
Execute();
Console.ReadKey();
}
private static void Execute()
{
Console.WriteLine(Resources.DefaultSomething);
}
}
もちろん、これは単なる抜粋であり、なぜこれがこのように行われるのかについては詳しく説明しません。
これに関する私の問題は、デバッグで実行しているときとデバッガなしでリリースしているときの動作の違いです。
- デバッガーによるデバッグまたはリリース:
MyFactory
コンソールに出力されます - デバッガなしでリリース:空の行が出力されます
明らかに、問題は静的要素の初期化の実行順序と、リリースモードでのコンパイル中に実行されるいくつかの最適化にあります。このセットアップにブレーキをかけずにこれを修正する方法を知りたいです。