Bagikan melalui


Kelas System.Resources.MissingManifestResourceException

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Pengecualian MissingManifestResourceException dilemparkan karena alasan yang berbeda di aplikasi .NET versus UWP.

Aplikasi .NET

Di aplikasi .NET, MissingManifestResourceException dilemparkan ketika upaya untuk mengambil kumpulan sumber daya gagal karena kumpulan sumber daya untuk budaya netral tidak dapat dimuat dari suatu assembly tertentu. Meskipun pengecualian dilemparkan ketika Anda mencoba mengambil sumber daya tertentu, itu disebabkan oleh kegagalan untuk memuat kumpulan sumber daya daripada kegagalan menemukan sumber daya.

Nota

Untuk informasi tambahan, lihat bagian "Menangani Pengecualian MissingManifestResourceException" di topik kelas ResourceManager.

Penyebab utama pengecualian termasuk yang berikut:

  • Kumpulan sumber daya tidak diidentifikasi dengan nama lengkapnya. Misalnya, jika parameter baseName dalam panggilan ke metode ResourceManager.ResourceManager(String, Assembly) menentukan nama akar kumpulan sumber daya tanpa namespace, tetapi kumpulan sumber daya diberi namespace ketika disimpan dalam perakitannya, panggilan ke metode ResourceManager.GetString melemparkan pengecualian ini.

    Jika Anda telah menyematkan file .resources yang berisi sumber daya budaya default di executable dan aplikasi Anda melemparkan MissingManifestResourceException, Anda dapat menggunakan alat pantulan seperti IL Disassembler (Ildasm.exe) untuk menentukan nama sumber daya yang sepenuhnya memenuhi syarat. Di ILDasm, klik dua kali label MANIFEST yang dapat dieksekusi untuk membuka jendela MANIFEST. Sumber daya muncul sebagai item .mresource dan dicantumkan setelah referensi rakitan eksternal dan atribut tingkat rakitan khusus. Anda juga dapat mengkompilasi utilitas sederhana berikut, yang mencantumkan nama lengkap sumber daya tersemat dalam assembly yang namanya diteruskan sebagai parameter baris perintah.

    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($"{filename} does not exist.");
             return;
          }   
          
          // Try to load the assembly.
          Assembly assem = Assembly.LoadFrom(filename);
          Console.WriteLine($"File: {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: {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
    
  • Anda mengidentifikasi himpunan sumber daya dengan nama file sumber dayanya (bersama dengan namespace opsionalnya) dan ekstensi filenya, bukan hanya dengan namespace dan nama file induknya. Misalnya, pengecualian ini dilemparkan jika set sumber daya budaya netral diberi nama GlobalResources dan Anda memberikan nilai GlobalResources.resources (bukan GlobalResources) ke parameter baseName konstruktor ResourceManager.ResourceManager(String, Assembly).

  • Set sumber daya khusus budaya yang diidentifikasi dalam panggilan metode tidak dapat ditemukan, dan set sumber daya cadangan tidak dapat dimuat. Misalnya, jika Anda membuat rakitan satelit untuk budaya Inggris (Amerika Serikat) dan Rusia (Rusia) tetapi Anda gagal menyediakan set sumber daya untuk budaya netral, pengecualian ini dilemparkan jika budaya aplikasi Anda saat ini adalah Inggris (Inggris).

MissingManifestResourceException menggunakan COR_E_MISSINGMANIFESTRESOURCEHRESULT , yang memiliki nilai 0x80131532.

MissingManifestResourceException menggunakan implementasi Equals default, yang mendukung kesetaraan referensi.

Untuk daftar nilai properti awal untuk instance MissingManifestResourceException, silakan lihat konstruktor MissingManifestResourceException.

Nota

Kami menyarankan agar Anda menyertakan sekumpulan sumber daya netral di assembly utama Anda, sehingga aplikasi Anda tidak akan gagal jika rakitan satelit tidak tersedia.

aplikasi Platform Windows Universal (UWP)

Aplikasi UWP menyebarkan sumber daya untuk beberapa budaya, termasuk budaya netral, dalam satu file indeks sumber daya paket (.pri). Akibatnya, dalam aplikasi UWP, jika sumber daya untuk budaya pilihan tidak dapat ditemukan, MissingManifestResourceException dilemparkan dalam salah satu kondisi berikut:

  • Aplikasi tidak menyertakan file .pri, atau file .pri tidak dapat dibuka.
  • File .pri aplikasi tidak berisi kumpulan sumber daya untuk nama akar yang diberikan.