网站 - “静态类”的类型初始化程序引发了异常

时间:2018-04-12 19:17:29

标签: asp.net .net vb.net

我有一个VB.NET网站项目。在其中一个页面中,在按钮单击期间,应该加载telerik RadGrid数据。它在我的本地机器上工作正常。但是,当我将其部署到服务器上的预生产时,会引发以下错误。

  

'Utility'的类型初始值设定项引发了异常

Utility是一个静态类,在调用静态类的任何成员(公共静态函数或公共静态变量)时,我收到了这个错误。

以下是代码段:

Partial Class Session
  Inherits System.Web.UI.Page

  Protected Sub RadGrid1_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
   If TypeOf e.Item Is GridDataItem Then
     Dim testString As String = String.Empty
     Dim encryptString As String = String.Empty

     Try
        encryptString = Utility.EncryptString(cellValue.ToString())
        testString = Utility.test

     Catch ex As Exception
        Logger.getInstance().log("Value1" & cellValue.ToString() & "Value2" & testString)
     Finally
     End Try
   End If
End Sub
End Class

在我的Utility.vb中,这就是我所拥有的:

Public Class Utility
   Public Shared test As String = "hello"

   Public Shared Function EncryptString(ByVal strEncrypted As String) As String

     Try
        Dim b As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(strEncrypted)
        Dim encryptedConnectionString As String = Convert.ToBase64String(b)
        Return encryptedConnectionString
    Catch ex As Exception
        Logger.getInstance().log("Error occurred in Utility.vb while executing EncryptString method. \nSOURCE: " & ex.Source.ToString() & "\nMESSAGE: " & ex.Message.ToString() & "\nTARGETSITE: " & ex.TargetSite.ToString() & "\nSTACKTRACE: " & ex.StackTrace.ToString())
        Logger.getInstance().log("\nstrEncrypted: " & strEncrypted)

    Finally
    End Try
 End Function
End Class

从我的日志记录语句中,我意识到当我调用Utility类时,错误正在发生,因为我添加到EncryptString()函数中的日志语句都没有显示在我的日志中。< / p>

我尝试评论EncryptString()函数的代码,并在我的public static string类中添加了一个名为test的{​​{1}}变量,并尝试从Session中的代码中访问它.aspx.vb。该字符串值也未被返回。

顺便说一下,我的所有代码都在同一个网站项目中。这个错误让我疯狂了2天。就像我提到的,它在我的本地机器上工作正常,但只在pre-prod服务器上失败。代码是使用旧框架(我相信3.5)编写的,然后我们升级到4.6.2并迁移到新服务器。我们在新服务器上的迁移过程中遇到了这个问题。

3 个答案:

答案 0 :(得分:1)

好的,所以我想出了这个问题。在Utility.vb类的开头有一些不受支持的加密算法变量声明。

Private Shared DES As New TripleDESCryptoServiceProvider
Private Shared MD5 As New MD5CryptoServiceProvider

在服务器上打开FIPS合规性,我们已经知道这些算法不符合最新的.net框架。但是我没有意识到,即使这些声明在我的函数调用中没有真正被使用时也会产生误导性的错误。

当我评论出代码的那些部分时,它开始正常工作。

答案 1 :(得分:0)

检查异常的InnerException属性。每当类初始化程序失败时,原始异常应设置为未处理异常的InnerException属性。

答案 2 :(得分:-1)

如果你想要一个真正的静态类,你需要在VB.Net中创建一个模块。