我有一个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并迁移到新服务器。我们在新服务器上的迁移过程中遇到了这个问题。
答案 0 :(得分:1)
Private Shared DES As New TripleDESCryptoServiceProvider
Private Shared MD5 As New MD5CryptoServiceProvider
在服务器上打开FIPS合规性,我们已经知道这些算法不符合最新的.net框架。但是我没有意识到,即使这些声明在我的函数调用中没有真正被使用时也会产生误导性的错误。
当我评论出代码的那些部分时,它开始正常工作。
答案 1 :(得分:0)
检查异常的InnerException属性。每当类初始化程序失败时,原始异常应设置为未处理异常的InnerException属性。
答案 2 :(得分:-1)
如果你想要一个真正的静态类,你需要在VB.Net中创建一个模块。