Всем привет.
Есть логика, построенная на сайдэффектах от инициализации переменных. С переходом на .NET 4 она перестала отрабатывать в релизе.
class Base
{
public Base()
{
Console.WriteLine("Base constructed.");
}
public static string BaseStaticString;
public static string SideEffect(string str)
{
return BaseStaticString = str;
}
}
class Derived : Base
{
public static string DerivedStaticString = SideEffect("A"); // Выкидывается в релизе
}
class Program
{
static void Main(string[] args)
{
Activator.CreateInstance(typeof (Derived));
Console.WriteLine(Base.BaseStaticString);
Console.WriteLine("done.");
Console.ReadKey();
}
}
Где можно почитать о выкидывании инициализаторов переменных со включенной оптимизацией в .NET 4? Случилось так, что выкинуты инициализаторы используемых переменных, но это у меня пока не получается смоделировать в небольшом примере.
В качестве воркэраунда помог перенос инициализаторов в статический конструктор.