网站 - 'Static Class'的类型初始值设定项引发异常



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

"实用工具"的类型初始值设定项引发异常

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

在我的实用程序.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()函数中的任何日志记录语句都没有显示在我的日志中。

我尝试注释掉EncryptString()函数的代码,并在Utility类中添加了一个名为testpublic static string变量,并尝试从 Session.aspx.vb 的代码访问它。该字符串值也没有返回。

顺便说一下,我的所有代码都在同一个网站项目中。这个错误让我在过去的 2 天里发疯。就像我提到的,它在我的本地计算机上运行良好,但仅在预生产服务器上失败。代码是使用较旧的框架(我相信是 3.5)编写的,然后我们升级到 4.6.2 并迁移到新服务器。我们在新服务器上的迁移过程中遇到了这个问题。

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

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

FIPS 合规性在服务器上处于打开状态,我们已经知道这些算法不符合最新的 .net 框架。但是我没有意识到,即使只是这些声明也会引发误导性错误,因为它们并没有真正用于我的函数调用。

当我注释掉代码的这些部分时,它开始正常工作。

检查异常的 InnerException 属性。每当类初始值设定项失败时,原始异常都应设置为未处理异常的 InnerException 属性。

如果你想要一个真正的静态类,你需要把它变成一个模块,VB.Net。

最新更新