【问题标题】:TypeInitializationException thrown for Program class为 Program 类抛出 TypeInitializationException
【发布时间】:2014-07-25 11:32:04
【问题描述】:

我的 Windows 窗体应用程序之前可以运行,但突然停止运行。我收到以下异常:

异常详情如下:

System.TypeInitializationException 未处理
消息:mscorlib.dll 中发生了“System.TypeInitializationException”类型的未处理异常
附加信息:“NotificationTester.Program”的类型初始化程序引发了异常。

当我点击确定时,VS 窗口会显示以下内容:

该解决方案早些时候运行良好。我不明白出了什么问题。

【问题讨论】:

  • 对于TypeInitializationException,您需要检查 InnerException 属性以获取更多详细信息
  • 嗯,我知道每当出现异常时,我都应该查找 InerExceotion,方法是单击“异常”弹出对话框中的“异常详细信息”链接,如 here 所示。关键是我的代码没有输入Program.Main() 所以我无法调试我的代码。我按 F5 并得到这个异常。不幸的是,这个异常对话框没有查看详细信息链接。所以我认为对这个问题的反对票将被删除。
  • 哦,它的static Program() 构造函数也被下面的@Marc Gravell 识别,希望异常描述能告诉我。

标签: c# visual-studio exception


【解决方案1】:

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

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

或:

static Program() {
    // stuff
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,有同样的问题。在 app.config 中重复(错误的复制粘贴)。有 applicationSettings 标签重复。 <applicationSettings> <applicationSettings> <MyProject.Properties.Settings> <setting name="xxxx" serializeAs="String"> <value>....</value> </setting> </MyProject.Properties.Settings> </applicationSettings> ..... </applicationSettings>
    • 对我来说也是如此!我检查了我的源代码控制历史并看到了变化。我删除了更改,现在一切都很好。我们需要为@Stagg 举办派对。
    • 当我将<appSettings> 元素添加到已经使用<applicationSettings> 的配置时遇到了这个问题
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我收到了相同的错误消息,就我而言,原因是我的主程序设置为构建为 32 位控制台应用程序,并且我添加了一个访问 64 位 dll 的私有变量记录器。

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

      将主程序改成64位后,问题就解决了。

      【讨论】:

        【解决方案5】:

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

        每个人只允许一个<configSections> 元素 config 文件,如果存在必须是根 <configuration> 元素的第一个子元素。

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

        希望对某人有所帮助。

        【讨论】:

          【解决方案6】:

          就我而言,这是一件非常愚蠢的事情。我不小心输入了这样的内容

          <configuration>
              <appSettings>
                   <add key="someKey" value="SomeValue" />sss
                   <add key="someKey1" value="SomeValue1" />
              </appSettings>
          </configuration> 
          

          sss - 对我造成了错误。任何随机字符输入。

          【讨论】:

            【解决方案7】:

            平台目标设置与任何 CPU 相同,我更喜欢选中 32 位,取消选中最后一个解决了我的问题。

            【讨论】:

              【解决方案8】:

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

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

              用这个:

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

              希望它有所帮助,您不必花费两个小时来找出错误...

              【讨论】:

                【解决方案9】:

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

                如果发生这种情况,请查看“内部异常”属性,然后您会看到更好的错误消息。就我而言,它说“找不到 xxx.dll”

                【讨论】:

                  【解决方案10】:

                  所以,如果您没有像我一样收到 innerException 消息,您可以在一些静态变量(例如您可能已声明的字符串)上设置断点。然后,您可以使用 F10 从那里进行调试。

                  【讨论】:

                  • 就是这样。我通常将所有全局变量设置在顶部,并始终在构造函数中初始化它们。最近一直在改,忘记先检查了。
                  【解决方案11】:

                  对我来说,这个问题是由在 AppData\Local[Manufacturer][Product Name] 目录中创建的恶意 user.config 文件引起的。我不确定它是如何到达那里的,但似乎不时被创建。

                  【讨论】:

                    【解决方案12】:

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

                    “MyLibrary”的类型初始化程序引发异常。

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

                    "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 中的程序集重定向。

                    :(

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

                      <runtime>
                        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                          <dependentAssembly>
                            <assemblyIdentity name="log4net" publicKeyToken="b32731d11ce58905" />
                            <codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" />
                          </dependentAssembly>
                          <dependentAssembly>
                            <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
                            <codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" />
                          </dependentAssembly>
                          <dependentAssembly>
                            <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
                            <codeBase version="1.2.13.0" href="log4netv1.2.13.0\log4net.dll" />
                          </dependentAssembly>
                        </assemblyBinding>
                      </runtime>
                    

                    【讨论】:

                      【解决方案13】:

                      我有同样的问题:在 MS VS 2015 中运行程序并触发异常消息:

                      System.TypeInitializationException was unhandled
                      Message: An unhandled exception of type 'System.TypeInitializationException' occurred in mscorlib.dll
                      Additional information: Der Typeninitialisierer für "<Module>" hat eine Ausnahme verursacht.
                      

                      这个异常的来源是什么? 因此,我启动了 EXE 文件并显示了异常消息对话框。使用 MS VS 回答“调试模式”,以便显示有关异常的更多信息。

                      System.IO.FileNotFoundException was unhandled
                          Message: An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll
                          Additional information: Die Datei oder Assembly "SIC, Version=19.2.6.3, Culture=neutral, PublicKeyToken=**************" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
                      

                      我去这个参考并分析属性 属性:“复制本地”为假 - 因为之前已安装到 GAC 解决方案:属性“复制本地”设置为 true 并构建新的程序集并工作:-)

                      也许这些信息有帮助!所以祝你有美好的一天。

                      【讨论】:

                        【解决方案14】:

                        原因是 app.config/Web.config 的某些部分已更改。

                        【讨论】:

                          猜你喜欢
                          • 2023-03-08
                          • 2017-03-23
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2016-10-30
                          • 2014-12-11
                          相关资源
                          最近更新 更多