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提供給GlobalResourcesbaseName建構函式的 參數,則會擲回這個例外狀況ResourceManager.ResourceManager(String, Assembly)

  • 找不到方法呼叫中所識別的文化特性特定資源集,而且無法載入後援資源集。 例如,如果您為英文(美國)和俄羅斯(俄羅斯)文化特性建立附屬元件,但無法提供中性文化特性的資源集,則如果您的應用程式目前的文化特性是英文(英國),則會擲回此例外狀況。

MissingManifestResourceException 會使用具有 值0x80131532的 HRESULT COR_E_MISSINGMANIFESTRESOURCE

MissingManifestResourceException 會使用支持參考相等的預設 Equals 實作。

如需執行個體的初始屬性值的清單MissingManifestResourceException,請參閱MissingManifestResourceException建構函式。

注意

建議您在主要元件中包含一組中性資源,因此如果附屬元件無法使用,您的應用程式將不會失敗。

通用 Windows 平台 (UWP) 應用程式

UWP 應用程式會在單一套件資源索引 (.pri) 檔案中部署多個文化特性的資源,包括中性文化特性。 因此,在 UWP 應用程式中,如果找不到慣用文化特性的資源, MissingManifestResourceException 則會在下列任一情況下擲回 :

  • 應用程式不包含 .pri 檔案,或無法開啟 .pri 檔案。
  • 應用程式的 .pri 檔案不包含指定根名稱的資源集。