Berikut ini adalah kode layanan Windows saya. Ketika saya debug kode, saya mendapatkan kesalahan / pengecualian:
Penginisialisasi tipe untuk 'CSMessageUtility.CSDetails' memberikan pengecualian.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Threading;
using System.Windows;
using System.Windows.Forms;
using CSMessageUtility;
namespace CS_Data_Trasmmiting_Service
{
public partial class svcCSWinServ : ServiceBase
{
//private string sLogFormat;
//private string sErrorTime;
private Thread new_thread;
Logger logObject = new Logger();
private bool isenable = true;
public svcCSWinServ()
{
InitializeComponent();
logObject.append("Initialize Service " + DateTime.Now.ToString(), 70);
CheckForAlarms();
}
protected override void OnStart(string[] args)
{
try
{
new_thread = new Thread(new ThreadStart(CheckForAlarms));
new_thread.Start();
}
catch
{
}
logObject.append("Service Started successfully " + DateTime.Now.ToString(), 70);
}
protected override void OnStop()
{
try
{
isenable = false;
new_thread.Abort();
}
catch
{
}
logObject.append("Service Stopped successfully " + DateTime.Now.ToString(), 70);
}
void CheckForAlarms()
{
try
{
while (true)
{
//if((DateTime.Now.ToString("HH:mm") == "18:00"))
//{
logObject.append("Start Sending Data " +DateTime.Now.ToString(), 70);
try
{
//SendAllInfo();
string str = CSMessageUtility.CSDetails.createDHSMessageFormat();
Thread.Sleep(2000);
string str1 = CSMessageUtility.CSDetails.createEALMessageFormat();
Thread.Sleep(2000);
string str2 = CSMessageUtility.CSDetails.createProductStatusMessageForamt();
Thread.Sleep(2000);
string str3 = CSMessageUtility.CSDetails.createEODMessageFormat();
Thread.Sleep(2000);
string str4 = CSDetails.createProductReceiptEntryatBOSMessageFormat();
Thread.Sleep(2000);
string str5 = CSMessageUtility.CSDetails.createProductSaleMessageFormat();
Thread.Sleep(2000);
string str6 = CSMessageUtility.CSDetails.createTotalizerExceptionMessageFormat();
Thread.Sleep(2000);
//CSMessageUtility.CSDetails.createDailyCOtransferMessageFormat();
//Thread.Sleep(2000);
}
catch (Exception ee)
{
logObject.append(ee.Message, 70);
}
logObject.append("Finished Sending Data " +DateTime.Now.ToString(), 70);
Thread.Sleep(3000);
//}
//Thread.Sleep(20000);
}
}
catch (Exception ex)
{
logObject.append("Thread Exception: "+ ex.Message + " "+ DateTime.Now.ToString(), 70);
try
{
new_thread.Abort();
}
catch (Exception ex1)
{
logObject.append("Thread Exception: " +ex1.Message + " " + DateTime.Now.ToString(), 70);
}
if (isenable == true)
{
new_thread = new Thread(new ThreadStart(CheckForAlarms));
new_thread.Start();
}
}
}
}
}
c#
windows-services
gofor.net
sumber
sumber
Jawaban:
Periksa
InnerException
properti dariTypeInitializationException
; kemungkinan berisi informasi tentang masalah yang mendasarinya, dan di mana tepatnya hal itu terjadi.sumber
static CSDetails
di kelasCSMessageUtility.CSDetails
(dan metode apa pun yang dipanggil). Jika Anda tidak menemukan masalah sendiri, perbarui pertanyaan dengan kode itu.The input is not a valid Base-64 string as it contains a non-base 64 character
apa fungsi kembali ke objek DataTable, tetapi bagi saya, sebenarnya ada masalah mendasar di mana saya memanggilapp.config
parameter dengan nama yang salah, jadi variabel yang saya gunakan untuk membentuk connectionstring saya adalah nol. Oleh karena itu tidak bisa membukaOracleConnection
fungsi itu untuk mengembalikan DataTable. Saran terbaik adalah untuk menyelami fungsi yang mendasari yang mengembalikan kesalahan.Masalah ini dapat disebabkan jika suatu kelas mencoba untuk mendapatkan nilai kunci di web.config atau app.config yang tidak ada di sana.
mis
. Kelas memiliki variabel statis
Tetapi web.config tidak mengandung
GoogleCalendarApplicationClientID
kunciKesalahan akan terjadi pada panggilan fungsi statis atau pembuatan instance kelas apa pun
sumber
ClientID
dalam contoh ini akan memiliki kesalahan ini. Pos yang bagus.The type initializer for 'CSMessageUtility.CSDetails' threw an exception.
berarti konstruktor statis pada kelas itu melemparkan Pengecualian - jadi Anda perlu melihat apakah ada konstruktor statis kelas CSDetails, atau dalam inisialisasi anggota statis kelas itu.sumber
Saya mengalami masalah yang sama, ketika saya menggunakan metode statis di kelas Util, sama seperti Anda telah menggunakan 'CSMessageUtility.CSDetails'.
Masalahnya adalah bahwa selama inisialisasi statis kelas (menggunakan konstruktor statis), kerangka kerja juga menginisialisasi variabel statis (bidang) di kelas. Saya memiliki variabel statis yang mencoba membaca nilai dari app.config, dan app.config tidak memiliki pengaturan masing-masing, sehingga menghasilkan pengecualian yang tidak ditangani. Ini menghasilkan "referensi objek yang tidak disetel ke instance objek." sebagai pengecualian batin.
sumber
Satu hal lagi untuk memeriksa ketika kesalahan inisialisasi ini dilemparkan adalah untuk memeriksa apakah target. Versi NET diinstal pada server. Anda dapat mengklik kanan proyek dan melihat apa. NET versi aplikasi penargetan.
sumber
Saya mengalami masalah yang sama yang disebabkan oleh memiliki dua properti konfigurasi yang sama (yang cocok dengan app.config):
sumber
Skenario lain yang mungkin menyebabkan ini adalah ketika Anda memiliki bagian dari kode Anda yang memanggil:
Perlu diingat bahwa Anda harus menggunakan
OWSTIMER.EXE.CONFIG
file untuk pengaturan file konfigurasi. Saya memilikiApp.config
file yang saya coba baca dan saya mendapatkan kesalahan ini karena pada contoh instance pekerjaan saya, saya memiliki baris dalam kode saya yang merujuk keConnfiguration.AppSettings
&Configuration.ConnectionStrings
. Pastikan Anda mengikuti jalan:dan letakkan pengaturan konfigurasi Anda dalam
OWSTIMER.EXE.CONFIG
file.sumber
Ini bisa terjadi jika Anda memiliki properti ketergantungan yang terdaftar ke tipe pemilik yang salah (argumen ownerType).
Perhatikan SomeOtherControl seharusnya menjadi YourControl.
sumber
Jika karena alasan apa pun daya berjalan atau Visual Studio IDE lumpuh dapat menyebabkan masalah ini di dalam bin / debug bin / release ...
Hapus saja konten dan kompilasi ulang (dari pengalaman pribadi ketika jari kaki saya menekan tombol reset!)
sumber
Saya memiliki konfigurasi yang berbeda tetapi masih terkait.
Bisa jadi bagian konfigurasi khusus yang belum dideklarasikan di configSections .
Cukup deklarasikan bagian dan kesalahan harus menyelesaikan sendiri.
sumber
Saya mengalami masalah ini karena ketidakcocokan antara versi runtime majelis. Harap verifikasi versi runtime dari rakitan utama (aplikasi panggilan) dan rakitan yang dimaksud
sumber
Sebagai Kesalahan mengatakan inisialisasi Tipe / Kelas gagal. Ini biasanya terjadi ketika ada beberapa pengecualian dalam konstruktor kelas. Alasan paling umum adalah Anda menetapkan beberapa nilai dalam pembacaan konstruktor dari file konfigurasi dan file konfigurasi hilang nilai-nilai tersebut.
sumber
Dalam kasus saya, saya mengalami kegagalan pada Logger.Buat di dalam perpustakaan kelas yang sedang digunakan oleh aplikasi (konsol) utama saya. Masalahnya adalah saya lupa menambahkan referensi ke NLog.dll di aplikasi konsol saya. Menambahkan referensi dengan versi .NET Framework library yang benar memperbaiki masalah.
sumber
Punya kasus seperti ini dalam proyek WPF. Masalah saya ada pada baris yang berbunyi seperti ini:
Di mana
FillTable()
mengembalikan DataTable berdasarkan string kueri SQL. Jika saya melakukan opsi "salin pengecualian ke clipboard", saya pikir itu, dan disisipkan ke Notepad, saya bisa melihat pesannya. Bagi saya, ituThe input is not a valid Base-64 string as it contains a non-base 64 character
.Masalah saya yang sebenarnya bukan bahwa string kueri memiliki sesuatu yang seharusnya tidak ada di sana, seperti yang saya pikirkan, karena
string strMySqlQuery = "SELECT * FROM My_Table"
string saya dan berpikir itu bisa menjadi*
atau_
, tetapi masalah sebenarnya ada diFillTable()
, di mana saya memiliki panggilan ke yang lain fungsi,GetConnection()
yang mengembalikanOracleConnection
objek, untuk membukanya dan mengambil dan mengembalikan DataTable. Di dalamGetConnection()
saya mendapatkanapp.config
parameter untuk string koneksi saya, dan salah satu dari mereka salah nama, jadi itu menetapkan nilai nol untuk kata sandi akun layanan dan tidak membuat koneksi DB. Jadi itu tidak selalu di mana kesalahan itu benar untuk semua keadaan. Terbaik untuk menyelami fungsi di mana kesalahan itu dan debug langkah demi langkah dan memastikan semua nilai dipenuhi dengan apa yang Anda harapkan.sumber
Saya juga menghadapi kesalahan ini dalam dua situasi
Saat melakukan pengalihan dari lapisan BAL ke lapisan DAL saya menghadapi pengecualian ini. Pengecualian dalam mengatakan bahwa "Kesalahan Referensi Objek".
Web.Config
kunci file tidak cocok.Semoga ini bermanfaat untuk menyelesaikan masalah Anda.
sumber
Mirip dengan apa yang dinyatakan Muhammad Iqbal .. saya di VB.NET sebuah (mungkin juga C #) proyek di mana saya menghapus pasangan kunci-nilai dari
App.config
yang direferensikan oleh variabel global keSub Main()
dariModule Main
. Oleh karena itu, pengecualian (dan istirahat) terjadiModule Main
sebelumSub Main()
. Kalau saja saya punya break-point padaDim
, tetapi kita biasanya tidak istirahat pada variabel global. Mungkin alasan yang bagus untuk tidak menyatakan global merujuk pada App.config? Dengan kata lain, ini ...Disebabkan oleh...
App.config
Modul utama
sumber
Dalam kasus saya, saya memiliki kelas pembantu yang statis. Di kelas itu adalah metode untuk menginisialisasi SqlCommand tergantung pada variabel. Karena ini dipanggil di beberapa tempat, saya memindahkannya ke kelas helper dan dipanggil sesuai kebutuhan, jadi metode ini juga statis. Sekarang saya memiliki properti global yang merupakan string koneksi di Global.asax yang menunjuk ke string koneksi di web.config. Kadang-kadang saya akan mendapatkan "Penginisialisasi tipe untuk 'Helper' melemparkan pengecualian". Jika saya memindahkan metode dari kelas Helper ke kelas di mana ia dipanggil dari semua itu baik. Pengecualian batin mengeluhkan objek menjadi nol (kelas Helper). Apa yang saya lakukan adalah menambahkan Menggunakan Helper ke Global.asax dan meskipun itu tidak digunakan oleh Global.asax ini memecahkan masalah.
sumber
Jawaban saya juga terkait dengan bagian Konfigurasi. Jika Anda menetapkan nilai dari file Config di kelas statis C # atau Module.VB dari VB, Anda akan mendapatkan kesalahan ini saat dijalankan.
add key = "LogPath" value = "~ / Error_Log /"
Menggunakan Forward slash di Web.Config juga menyebabkan kesalahan ini saat Jalankan. Saya baru saja menyelesaikan masalah ini dengan meletakkan BackSlash
tambah kunci = "LogPath" value = "~ \ Error_Log \"
sumber
Saya membungkus baris saya yang menabrak blok try-catch, mencetak pengecualian, dan langsung memecahkannya setelah dicetak. Informasi pengecualian yang ditampilkan memiliki jejak tumpukan yang mengarahkan saya ke file dan baris kode yang menyebabkan kesalahan terjadi.
sumber
Entah bagaimana keluar dari Visual Studio dan membukanya kembali memecahkan ini untuk saya.
sumber
Kunci kamus harus unik!
Dalam kasus saya, saya menggunakan Kamus, dan saya menemukan dua item di dalamnya secara tidak sengaja memiliki kunci yang sama.
sumber
Patut dicatat: Saya punya beberapa proyek dalam solusi saya dan saya lupa menambahkan referensi / pustaka Nuget. Ketika saya menjalankan metode di kelas statis, yang menggunakan perpustakaan yang diberikan, itu melemparkan pengecualian yang disebutkan.
sumber