要重现这个问题的代码很简单:
class Program
{
private static ClassA a = new ClassA(); static void Main(string[] args)
{
Console.ReadLine();
}
} class ClassA
{
static ClassA()
{
Console.WriteLine("A cctor");
}
}只要访问ClassA,它的静态构造方法就会执行。
所以程序一运行就应该输出“A cctor”。
实际上如果target framework设为.net 2.0或者3.5的话输出结果都是“A cctor”。
但是如果target framework是.net 4而且用release编译的话,编译出的程序集脱离IDE运行(在VS里运行结果还是对的)时则没有输出任何东西。太奇怪了,哪位知道如何解决请帮忙,谢谢。
class Program
{
private static ClassA a = new ClassA(); static void Main(string[] args)
{
Console.ReadLine();
}
} class ClassA
{
static ClassA()
{
Console.WriteLine("A cctor");
}
}只要访问ClassA,它的静态构造方法就会执行。
所以程序一运行就应该输出“A cctor”。
实际上如果target framework设为.net 2.0或者3.5的话输出结果都是“A cctor”。
但是如果target framework是.net 4而且用release编译的话,编译出的程序集脱离IDE运行(在VS里运行结果还是对的)时则没有输出任何东西。太奇怪了,哪位知道如何解决请帮忙,谢谢。
private static ClassA a = new ClassA();肯定会执行它的静态构造方法,但是静态构造方法只会被执行一次
我也是这么想的啊。
但是target framework设为.net 4,用release编译,并且在IDE之外运行的时候就没有执行。
{
Console.ReadLine();
}那么我直接删除这种成事不足的代码就完了,何必管它呢?
swig在给非托管类库生成托管的包装时会依赖于静态字段初始化的时机,我在用它的时候遇到了问题,所以才有这么一问。
我在这儿:http://www.cnblogs.com/cuipengfei/archive/2010/08/01/1790091.html把问题记下来了。
因为没有规范,所以对问题的分类上,只能判断为“新特性”,而不是一个Reopen的bug。这就是内部的问题处理流程。