System.TypeInitializationException 当应用程序初始化 SQL 连接时

System.TypeInitializationException when application initializes SQL connection

我有一个在 .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());
        }

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

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

首先我们要明白TypeInitializationException是什么意思:

When a class initializer fails to initialize a type, a TypeInitializationException is created and passed a reference to the exception thrown by the type's class initializer. The InnerException property of TypeInitializationException holds the underlying exception.

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

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

根据您解释的情况,很有可能初始化数据库连接 class 失败,而您没有捕捉到数据库连接错误。因此,首先将 try/catch 放在该代码周围。然后您应该能够看到并修复该错误。

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

即你有一个 via 模型需要一个 SchoolManagement.Business.Masters.BIUsers 对象,它试图从数据库调用中盲目读取,而不是得到 TypeInitializationException,这显然是不高兴的。