预计输出&输出我得到在调试模式下,和VS2010下释放模式,.NET 4.0:静态成员变量未在Release - Compiler/clr bug中初始化?
bar construct
main
输出在释放模式不 VS2010的调试器,并且在WinDbg中:
main
程序并未表现出对VS2005这种行为,.NET 2.0
using System;
namespace static_init
{
public class bar
{
public bar()
{
Console.WriteLine("bar construct");
}
}
class Program
{
public static bar blah = new bar();
static void Main(string[] args)
{
Console.WriteLine("main");
Console.ReadLine();
}
}
}
可能与: Static constructor can run after the non-static constructor. Is this a compiler bug?
更新
在我实际的代码,构造函数初始化bar()
一些互操作代码C++(非托管)。它需要发生在这个库的其他任何东西之前 - 是否有任何方法可以确保没有在库中加入一个涉及所有静态(带有不在外部引用的副作用)的函数?
对于未来的搜索者的注意事项:我正在使用SWIG,并且这是他们在包装生成代码中做出的假设。 SWIGStringHelper
是目前的罪犯,可能会有更多。
结论
更新痛饮的2.0版本,需要通过.NET的新版本它把在静态构造函数。
非常感谢'更新'和'结论' - 我有非常相似的场景,也使用旧的SWIG 1.3.40 - 只是更新到2.0.9,一切正常。 “结论”为我节省了大量时间! – sergtk 2013-03-13 21:28:29