System.Resources.MissingManifestResourceException 類別
本文提供此 API 參考文件的補充備註。
MissingManifestResourceException在 .NET 與 UWP 應用程式中,因不同原因而擲回例外狀況。
.NET 應用程式
在 .NET 應用程式中, MissingManifestResourceException 當嘗試擷取資源失敗時,會擲回 ,因為無法從特定元件載入中性文化特性的資源集。 雖然當您嘗試擷取特定資源時擲回例外狀況,但原因是無法載入資源集,而不是找不到資源。
注意
如需詳細資訊,請參閱類別主題中的 ResourceManager <處理MissingManifestResourceException 例外狀況>一節。
例外狀況的主要原因包括:
資源集不是透過其完整名稱來識別。 例如,如果
baseName
方法呼叫 ResourceManager.ResourceManager(String, Assembly) 中的 參數指定沒有命名空間之資源集的根名稱,但是當資源集儲存在其元件中時會指派命名空間,則方法的呼叫 ResourceManager.GetString 會擲回這個例外狀況。如果您已在可執行檔中內嵌包含預設文化特性資源的 .resources 檔案,且您的應用程式擲MissingManifestResourceException回 ,您可以使用 IL 反組譯程式 (Ildasm.exe) 等反映工具來判斷資源的完整名稱。 在 ILDasm 中,按兩下可執行檔的 MANIFEST 標籤,以開啟 MANIFEST 視窗。 資源會顯示為
.mresource
專案,並列在外部元件參考和自定義元件層級屬性之後。 您也可以編譯下列簡單公用程式,其中列出元件中內嵌資源的完整名稱,其名稱會以命令行參數的形式傳遞給它。using System; using System.IO; using System.Reflection; public class Example0 { public static void Main() { if (Environment.GetCommandLineArgs().Length == 1) { Console.WriteLine("No filename."); return; } string filename = Environment.GetCommandLineArgs()[1].Trim(); // Check whether the file exists. if (! File.Exists(filename)) { Console.WriteLine("{0} does not exist.", filename); return; } // Try to load the assembly. Assembly assem = Assembly.LoadFrom(filename); Console.WriteLine("File: {0}", filename); // Enumerate the resource files. string[] resNames = assem.GetManifestResourceNames(); if (resNames.Length == 0) Console.WriteLine(" No resources found."); foreach (var resName in resNames) Console.WriteLine(" Resource: {0}", resName.Replace(".resources", "")); Console.WriteLine(); } }
Imports System.IO Imports System.Reflection Imports System.Resources Module Example3 Public Sub Main() If Environment.GetCommandLineArgs.Length = 1 Then Console.WriteLine("No filename.") Exit Sub End If Dim filename As String = Environment.GetCommandLineArgs(1).Trim() ' Check whether the file exists. If Not File.Exists(filename) Then Console.WriteLine("{0} does not exist.", filename) Exit Sub End If ' Try to load the assembly. Dim assem As Assembly = Assembly.LoadFrom(filename) Console.WriteLine("File: {0}", filename) ' Enumerate the resource files. Dim resNames() As String = assem.GetManifestResourceNames() If resNames.Length = 0 Then Console.WriteLine(" No resources found.") End If For Each resName In resNames Console.WriteLine(" Resource: {0}", resName.Replace(".resources", "")) Next Console.WriteLine() End Sub End Module
您可以透過資源檔名稱(以及其選擇性命名空間)和擴展名來識別資源集,而不是單獨識別其命名空間和根檔名。 例如,如果中性文化特性的資源集命名
GlobalResources
為 ,而且您會將的值GlobalResources.resources
提供給GlobalResources
baseName
建構函式的 參數,則會擲回這個例外狀況ResourceManager.ResourceManager(String, Assembly)。找不到方法呼叫中所識別的文化特性特定資源集,而且無法載入後援資源集。 例如,如果您為英文(美國)和俄羅斯(俄羅斯)文化特性建立附屬元件,但無法提供中性文化特性的資源集,則如果您的應用程式目前的文化特性是英文(英國),則會擲回此例外狀況。
MissingManifestResourceException 會使用具有 值0x80131532的 HRESULT COR_E_MISSINGMANIFESTRESOURCE
。
MissingManifestResourceException 會使用支持參考相等的預設 Equals 實作。
如需執行個體的初始屬性值的清單MissingManifestResourceException,請參閱MissingManifestResourceException建構函式。
注意
建議您在主要元件中包含一組中性資源,因此如果附屬元件無法使用,您的應用程式將不會失敗。
通用 Windows 平台 (UWP) 應用程式
UWP 應用程式會在單一套件資源索引 (.pri) 檔案中部署多個文化特性的資源,包括中性文化特性。 因此,在 UWP 應用程式中,如果找不到慣用文化特性的資源, MissingManifestResourceException 則會在下列任一情況下擲回 :
- 應用程式不包含 .pri 檔案,或無法開啟 .pri 檔案。
- 應用程式的 .pri 檔案不包含指定根名稱的資源集。