TypeInitializationExeption在MSND中的描述爲:當類初始值設定項不能初始化類型時,將創建 TypeInitializationException 並向其傳遞由該類型的類初始值設定項引發的異常引用。
我們知道,類型初始化或者訪問類型的靜態成員時,都會對類中的其他靜態成員進行初始化,並執行靜態構造函數(如果有的話)。在這些過程中如果任一環節出現例如下面的代碼:
class ClassHelper
{
public static string Field = Do("Initial the static field");
public static string StaticString = "Initaial static string";
public string NonStaticString = "Initial non static string";
public ClassHelper()
{
NonStaticString = "Change non static string in instance constructor";
StaticString = "Change static string in instance constructor";
}
public static string Do(string field)
{
Console.WriteLine(field);
throw new Exception();
return field;
}
}
<p>1. 訪問類的某一靜態成員,而其他靜態成員的初始化(或靜態構造函數中)產生異常。例如訪問ClassHelper.StaticString,由於靜態成員Field的初始化產生異常,因此調用ClassHelper.StaticString會拋出TypeInitializationException。</p><p>2. 訪問類的某一靜態成員,該靜態成員的初始化(或靜態構造函數中)產生異常。例如訪問ClassHelper.Field。</p><p>3. 對該類進行初始化,而類中的某個靜態成員初始化(或靜態構造函數中)產生異常。例如ClassHelper helper = new ClassHelper()。</p><p>
</p><p>總之就是你要的東西不能初始化就會出現這個異常.</p><p>
</p><p><span style="color:#ff0000;">PS:如果你的項目採用三層結構,並且用到了工廠模式,比如你的數據訪問對象是通過數據訪問工廠產生的,而在數據訪問工廠中我們用的是反射機制,這個時候你要創建的對象所依賴的程序集必須要能訪問.比如你的SQLServerDAL程序集必須在你當前網站目錄的bin目錄裏面.否則就會出現上面的錯誤.</span>
</p>