C#错误“...的类型初始化程序引发异常

时间:2009-08-04 07:54:45

标签: c# class static

仅在某些计算机上发生此错误。通过读取堆栈信息,当我在静态类中调用此静态方法(“FormatQuery”)时会出现一些问题:

using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using FlexCel.Report;
using FlexCel.XlsAdapter;
using ComboBox=System.Windows.Forms.ComboBox;

namespace XSoftArt.A
{
    static class RHelper
    {
        private static string FormatQuery(string FieldName, int Count,
            CheckedListBox chekedListBox)
        {
            string ID = string.Empty;
            int n = Count;

            foreach (DataRowView item in chekedListBox.CheckedItems)
            {
                ID = ID + item["" + FieldName + ""];
                if (n > 1)
                {
                    ID = ID + " , ";
                    n--;
                }
            }
            return ID;
        }

        public static string FormatQuery(CheckedListBox chekedListBox)
        {
            return FormatQuery(chekedListBox.ValueMember,
                chekedListBox.CheckedItems.Count, chekedListBox);
        }
    }

那么,问题是什么?我该如何解决?项目配置或重新布局模式有什么问题吗?

错误信息:

   at XSoftArt.EVS.ReportHelper.FormatQuery(CheckedListBox chekedListBox)
   at XSoftArt.EVS.NewEmailSelectClient.LoadList_v2(String search, TextBox txtbox)
   at XSoftArt.EVS.NewEmailSelectClient.LoadContacts()
   at XSoftArt.EVS.NewEmailSelectClient.button7_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

11 个答案:

答案 0 :(得分:61)

Type Initializer异常表示无法创建类型。当您只是引用该类时,通常会在调用方法之前发生这种情况。

这里的代码是您的类型的完整文本吗?我会寻找类似失败的任务。获得应用程序设置和这种性质的东西我看到了很多。

static class RHelper
{
     //If this line of code failed, you'd get this error
     static string mySetting = Settings.MySetting;
} 

您还可以使用类型的静态构造函数来查看此内容。

无论如何,这堂课还有吗?

答案 1 :(得分:7)

我有同样的错误,但在我的情况下,它是由平台目标设置不匹配引起的。一个库专门设置为x86,而主应用程序设置为'Any'...然后我将我的开发转移到x64笔记本电脑。

答案 2 :(得分:5)

当我修改Nlog配置文件并且没有正确格式化XML时,我收到此错误。

答案 3 :(得分:4)

我尝试了你的代码:

CheckedListBox cb = new CheckedListBox();
for (var i = 1; i < 11; i++)
  cb.Items.Add("Item " + i, i % 3 == 0);

string fmt = RHelper.FormatQuery(cb);
Console.WriteLine(fmt);
Console.ReadLine();

它在这一行引起了例外:

foreach (DataRowView item in chekedListBox.CheckedItems)

// Unable to cast object of type 'System.String' to type 'System.Data.DataRowView'.

也许你也面临同样的问题。不要转换为 DataRowView ,而是尝试进行以下更改:

foreach (var item in chekedListBox.CheckedItems)
{
    ID = ID + item.ToString(); // item["" + FieldName + ""];

因为CheckedListBox中的项目是 object 类型。

答案 4 :(得分:4)

如果某个类试图获取web.config中不存在的键的值,则会出现此问题。

例如,该类具有静态变量ClientID

private static string ClientID = System.Configuration.ConfigurationSettings.AppSettings["GoogleCalendarApplicationClientID"].ToString();

web.config不包含'GoogleCalendarApplicationClientID'键,则会在任何静态函数调用或任何类实例创建时抛出错误

答案 5 :(得分:1)

如果您有网络服务,请检查指向该服务的URL。当我更改了我的Web服务URL时,我遇到了一个类似的问题。

答案 6 :(得分:1)

我用自己的代码得到了这个错误。我的问题是我在配置文件中有重复的密钥。

答案 7 :(得分:1)

尝试登录不再存在的NLog目标时出现此错误。

答案 8 :(得分:1)

这可能是因为没有Oracle Client的管理员权限。在App.config文件中添加:

<IPermission class="Oracle.DataAccess.Client.OraclePermission,
 Oracle.DataAccess, Version=2.111.7.20, Culture=neutral,
 PublicKeyToken=89b483f429c47342" version= "1" Unrestricted="true"/>

答案 9 :(得分:0)

我遇到了这个问题,就像Anderson Imes说的那样,它与app设置有关。我的问题是我的一个设置的范围设置为“用户”时应该是“应用程序”。

答案 10 :(得分:-4)

通过格式化不正确的NLog.config文件为我生成了此错误。