为Program类抛出TypeInitializationException

我的Windows窗体应用程序工作得更早,但突然间它停止工作。 我得到以下exception:

在此处输入图像描述

例外情况如下:

System.TypeInitializationException was unhandled Message: An unhandled exception of type 'System.TypeInitializationException' occurred in mscorlib.dll Additional information: The type initializer for 'NotificationTester.Program' threw an exception. 

单击“确定”后,VS窗口将显示以下内容:

在此处输入图像描述

解决方案早先工作正常。 我不知道什么是错的。

所以:任何一个字段初始化程序,或者用于Program的静态构造函数都失败了。 找出为什么。 注意: InnerException具有引发的实际exception,但是基本上:只调试字段初始值设定项和静态构造函数。 因此,请查看Program类中的任何一个:

 static SomeType someField = /* some non-trivial expression or method call */ 

要么:

 static Program() { // stuff } 

另一个可能的原因:app.config有重复的部分。

可能的原因:使用重复键初始化静态字典。

我得到了相同的错误消息,对于我的情况,原因是我的主程序设置为32位控制台应用程序,我添加了一个访问64位DLL的私有变量记录器。

 public class Program { public static readonly Logger logger = new Logger(typeof(Program)); 

在我将主程序更改为64位后,问题得到解决。

在我的情况下,原因是, 不是config文件中的第一个。

每个配置文件只允许一个元素,如果存在,则必须是根元素的第一个子元素。

configSections元素移动到配置文件的顶部。

希望它对某人有帮助。

平台目标设置为任何CPU都有相同的错误,并且更喜欢32位检查,取消选中最后一个解决了我的问题。

这是我在过去2小时内必须处理的一个奇怪问题。 我通过从我创建的列表中删除静态来解决它。

 private static readonly List someList = GlobalConfiguration.Connection.PopulateList(); 

与这一个:

 private readonly List someList = GlobalConfiguration.Connection.PopulateList(); 

希望它有所帮助,你不必花两个小时来找出这个bug …

确保您没有遗漏任何依赖项DLL。 在我的例子中,我引用的DLL依赖于另一个DLL。

如果发生了这种情况,请查看“内部exception”属性,然后您将看到更好的错误消息。 在我的情况下,它说“找不到xxx.dll”

所以,如果你没有得到像我这样的innerException消息,你可以在一些静态变量上设置一个断点,比如你可能声明的字符串。 然后你可以用F10从那里调试前进。

对我来说这个问题是由在AppData \ Local [制造商] [产品名称]目录中创建的流氓user.config文件引起的。 我不确定它是如何到达那里的,但似乎时不时地被创造出来。

在尝试了这里列出的所有答案后,我有了一个新答案:

“MyLibrary”的类型初始值设定项引发了exception。

如果您在InnerException中看到类似下面的内容……….

 "Could not load file or assembly 'log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a' or one of its dependencies. The system cannot find the file specified.":"log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" 

在我的情况下,我的目录具有正确的版本DLL。 (在这种情况下为log4net.dll)。

然后……问题被发现了。 app.config中的程序集重定向。

🙁

由于我有正确的版本,我删除了所有重定向。 你的情况可能会有所不同。