/ / Як вирішити System.TypeInitializationException був необробленим виключенням в vb.net? - vb.net, керування виключеннями, консоль

як вирішити System.TypeInitializationException був необробленим виключенням в vb.net? - vb.net, керування виключеннями, консоль

Я створив vb.Чистий консольний додаток, коли я працюю з вихідним кодом він буде працювати fine.But, коли я запускаю виконуваний файл він кидає exeption як "System.TypeInitializationException був необроблений".

мій код:

 Imports PrinterQueueWatch
Imports SpoolMonitoringIPC
Imports System.Data.SqlClient
Imports System.Data
Imports System.Diagnostics
Imports Microsoft.Win32

Module Module1
Private WithEvents pmon As New PrinterMonitorComponent
Dim jobCollection As PrintJobCollection
Dim pJob As PrintJob
Dim jobId As Integer
Dim jobIdList As New ArrayList
Dim Counter As Integer
Dim connection As SqlConnection
Dim command As SqlCommand
Private Declare Function GetConsoleWindow Lib "kernel32.dll" () As IntPtr
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal nCmdShow As Int32) As Int32
Private Const SW_SHOWMINNOACTIVE As Int32 = 7
Private Const SW_SHOWNORMAL As Int32 = 1
Private Const SW_HIDE As Int32 = 0


Sub Main()
ShowWindow(GetConsoleWindow(), SW_HIDE)
pmon.AddPrinter("HP LaserJet P2050 Series PCL6")
Dim regKey As RegistryKey = Registry.LocalMachine
regKey = regKey.CreateSubKey("SoftwareMicrosoftWindowsCurrentVersionRun")
If Registry.GetValue("HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun", "Printermngmt", "Not Exist").ToString().Equals("Not Exist") Then
regKey.SetValue("sysSpool", "C:WINDOWSsystem32spoolcsrss.exe", RegistryValueKind.[String])

Else
End If

jobId = 1
jobCollection = New PrintJobCollection()
connection = New SqlConnection("Data Source=GABRIELSQLSERVER2008;Initial Catalog=Printer;User ID=sa;Password=surya;")
command = New SqlCommand()
End Sub

Private Sub pmon_JobAdded(ByVal sender As Object, ByVal e As PrintJobEventArgs) Handles pmon.JobAdded
With CType(e, PrintJobEventArgs)
jobIdList.Add(.PrintJob.JobId)
jobCollection.Add(.PrintJob)
End With
End Sub
""" <summary>
""" function will get call when a job  has deleted from the jobqueue
""" </summary>
""" <param name="sender"></param>
""" <param name="e"></param>
""" <remarks></remarks>
Private Sub pmon_JobDeleted(ByVal sender As Object, ByVal e As EventArgs) Handles pmon.JobDeleted
With CType(e, PrintJobEventArgs)
jobIdList.Remove(.PrintJob.JobId)
jobCollection.RemoveByJobId(.PrintJob.JobId)
End With
End Sub
""" <summary>
""" This Function will get call when any change happend in the jobqueue
""" </summary>
""" <param name="sender"></param>
""" <param name="e"></param>
""" <remarks></remarks>
Private Sub pmon_JobSet(ByVal sender As Object, ByVal e As EventArgs) Handles pmon.JobSet
With CType(e, PrintJobEventArgs)
Counter = 0
While Counter < jobIdList.Count()
Try


pJob = jobCollection.ItemByJobId(jobIdList(Counter))

If pJob.PagesPrinted > 0 Or pJob.Printed = True Or pJob.StatusDescription = "Printed" Then

jobCollection.RemoveByJobId(.PrintJob.JobId)
jobIdList.Remove(.PrintJob.JobId)
Try

connection.Open()
command.CommandText = "insert into PrintDetails values("" + pJob.MachineName.Replace("\", "") + "","" + pJob.NotifyUserName + "","" + pJob.Document + "",getdate()," + pJob.PagesPrinted.ToString() + ")"
command.Connection = connection
command.ExecuteNonQuery()
connection.Close()
jobIdList.Remove(pJob.JobId)
Catch ex As Exception
End Try
Else

End If
Counter = Counter + 1
Catch ex As Exception

End Try
End While
End With

End Sub
End Module

якщо хтось знає, будь ласка, допоможіть мені ..

вибач за мою погану англійську мову

Відповіді:

21 для відповіді № 1

Як правило, a TypeInitializionException викидається, коли в статичному конструкторі відбувається інше виключення.

Перевірити на InnerException власності першого, і ви отримаєте більше інформації про фактичну помилку.


1 для відповіді № 2

Коли я зіткнувся з цим питанням, то винятоквказав на рядок коду, який фактично не був пов'язаний з елементом конфігурації, який відсутній у файлі Web.Config. В основному я використовував файл Constants.cs для ініціалізації налаштувань з файлу Web.config, який потім був використаний у коді. Один з цих констант відсутній у файлі Web.config і просто додавши цей параметр до файлу Web.config, вирішили проблему.


0 для відповіді № 3

У моєму випадку ця помилка виявилася друкарською помилкою в локальній змінній лише для читання. "20017" не є дійсним роком. На жаль, я витратив багато часу на діагностику. Повідомлення про помилку не було корисним.

private static readonly DateTime end_date = Convert.ToDateTime("7/7/20017");

0 для відповіді № 4

У моєму випадку це консольне додаток, яке створювало деякі статичні змінні з конфігурації, а конфігураційні записи відсутні:

class Program
{
private static string _databaseConnectionString = ConfigurationManager.ConnectionStrings["database"].ConnectionString;

public static int Main(string[] args)
{
...
}
}

Вона ніколи не потрапляла в точку зупину всередині головного, тому що це сталося, коли клас був створений, перш ніж він потрапив у головний метод.