【问题标题】:System.TypeInitializationException when application initializes SQL connection应用程序初始化 SQL 连接时发生 System.TypeInitializationException
【发布时间】:2021-11-18 07:27:04
【问题描述】:

我有一个在 .NET Framework 4.7.1 中开发的 ASP.NET MVC Web 应用程序。当我在不同于源计算机的 IIS 中托管应用程序时,我收到错误 System.TypeInitializationException。此错误仅在应用程序尝试连接到数据库时发生,并且应用程序和数据库连接未建立但相同的发布在具有相同规格和配置的另一台服务器中工作。我得到的只是以下错误。

我已经使用以下方法测试了程序集版本在运行时是否不同

 public void GetAssemblyInformation()
        {
            var names = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
            string path = @"D:\FilePath\AssemblyInfo.txt";
            System.IO.File.WriteAllLines(path, names.Select(i => i.ToString()).ToArray());
        }

但是我在服务器和主机上发现了相同的程序集版本,谁能帮我看看我在这里会犯什么错误

【问题讨论】:

  • 您能否更正您正在使用的 .NET 框架版本,以供将来参考。没有 7.1 :)
  • 是的,那是 4.7.1 :) 非常不同,因为我们也即将发布 .NET 6,而在 .NET 7 发布的那一年,人们会认为你在谈论这个。我会为您进行编辑。

标签: c# asp.net asp.net-mvc frameworks


【解决方案1】:

没有看到更多代码,我会给你我最好的猜测。

首先我们需要了解TypeInitializationException 的含义:

当类初始化器无法初始化一个类型时,会创建一个 TypeInitializationException 并传递一个对由该类型的类初始化器抛出的异常的引用。 TypeInitializationException 的 InnerException 属性包含底层异常。

所以在我们修复它之前,我们需要找到问题的根本原因,我们通过捕获这个异常来做到这一点,以便我们可以看到(真实的)InnerException

try {
    // code that we think is erroring (database connection or call maybe)    
}
catch (TypeInitializationException e) {
    throw e.InnerException;
}

鉴于您解释的场景,很有可能初始化数据库连接类失败并且您没有捕获数据库连接错误。因此,首先将 try/catch 放在该代码周围。然后您应该能够看到并修复该错误。

为了让您的应用程序在未来更具弹性,您可能需要考虑一些防御性编码。因为,在没有看到代码的情况下,我无法确定 - 但似乎您正在尝试使用返回的数据,而是设法使用在数据库调用期间引发的异常。

即您有一个期望 SchoolManagement.Business.Masters.BIUsers 对象的 via 模型,该对象试图从数据库调用中盲目读取,而不是获取 TypeInitializationException,这显然是不高兴的。

【讨论】:

  • 谢谢,我在使用 ```TypeInitializationException`` 方法后得到了异常,我丢失了用于连接数据库的 DLL 文件,这个答案有助于找到它
猜你喜欢
  • 2018-09-01
  • 2017-08-17
  • 1970-01-01
  • 2016-11-30
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多