預計輸出&輸出我得到在調試模式下,和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