Main()之前会发生什么?

时间:2011-08-08 15:12:10

标签: c# c#-2.0

当我开始在计算机上出现一些奇怪的症状时,问题就来了。

以下是发生的事情:我有一个用C#(.Net 2.0)编写的WinForms应用程序。如果我从Visual Studio 2005(Debug或Release)运行它,一切都很好。如果我尝试从Windows运行它(运行VS 2005中调试过程生成的完全相同的可执行文件),我得到一个 程序类中的“System.TypeInitializationException”。

我在静态构造函数和Main()中添加了调试日志消息(File.AppentAllText())。静态构造函数中的日志消息被写入,但Main()中的日志消息却没有。所以,显然,在静态构造函数完成之后以及在发出对Main()的调用之前会发生一些事情。

关于下一步要去哪里的建议?在调用Main()方法之前会发生什么?

谢谢大家。

编辑:我认为我应该指出应用程序在其他计算机上运行得很好。 :)

3 个答案:

答案 0 :(得分:2)

在静态构造函数中查看代码。 TypeInitializationException通常在静态构造函数中存在异常时发生,因此无法初始化类型。代码可以在IDE中正常工作,因为它是从具有不同安全权限的不同用户启动的。 作为旁注 - 我会尽可能避免使用静态构造函数。

答案 1 :(得分:1)

基于异常,它听起来像静态构造函数或静态字段的初始化在这里抛出一个无法处理的异常。鉴于Main方法显然没有执行,它可能发生在Main方法中引用的类型,因此尝试由CLR初始化。

有几种方法可以追踪造成这种情况的原因。他们都不是很漂亮

  • 检查程序的Main方法并分析每个Type in play,然后分析它们的静态构造函数以查看哪些可能正在抛出
  • 系统地注释Main方法中的行以发现导致异常的行

或者当您运行程序时,它应该弹出一个错误对话框。此时附加到进程并深入查看异常以查看导致问题的类型。

答案 2 :(得分:0)

当* .config文件出错时,您还会得到System.TypeInitializationException。在这种情况下检查LineNumber的innerException。