次の方法で共有


System.Resources.MissingManifestResourceException クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

MissingManifestResourceException.NET アプリと UWP アプリでは、さまざまな理由で例外がスローされます。

.NET アプリ

.NET アプリでは、 MissingManifestResourceException ニュートラル カルチャのリソース セットを特定のアセンブリから読み込めなかったため、リソースの取得が失敗した場合にスローされます。 特定のリソースを取得しようとすると例外がスローされますが、リソースを見つける失敗ではなく、リソース セットを読み込めませんでした。

Note

詳細については、クラス トピックの「MissingManifestResourceException 例外の処理」セクションを ResourceManager 参照してください。

例外のメインの原因は次のとおりです。

  • リソース セットは、その完全修飾名で識別されません。 たとえば、メソッドのResourceManager.ResourceManager(String, Assembly)呼び出しのパラメーターで、名前空間を持たないリソース セットのルート名を指定するが、そのアセンブリに格納されるときにリソース セットに名前空間が割り当てられている場合baseName、メソッドの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) を指定すると、この例外がbaseNameResourceManager.ResourceManager(String, Assembly)スローされます。

  • メソッド呼び出しで識別されるカルチャ固有のリソース セットが見つからないので、フォールバック リソース セットを読み込めません。 たとえば、英語 (米国) とロシア (ロシア) カルチャのサテライト アセンブリを作成しても、ニュートラル カルチャのリソース セットを指定できない場合、アプリの現在のカルチャが英語 (英国) の場合、この例外がスローされます。

MissingManifestResourceException は、0x80131532値を持つ HRESULT COR_E_MISSINGMANIFESTRESOURCEを使用します。

MissingManifestResourceException は、参照の等価性をサポートする既定の Equals の実装を使用します。

インスタンスの初期プロパティ値の一覧についてはMissingManifestResourceExceptionを参照してください、MissingManifestResourceExceptionコンス トラクター。

Note

サテライト アセンブリが使用できない場合にアプリが失敗しないように、メイン アセンブリにはニュートラル なリソース セットを含めるようにすることをお勧めします。

ユニバーサル Windows プラットフォーム (UWP) アプリ

UWP アプリは、ニュートラル カルチャを含む複数のカルチャのリソースを 1 つのパッケージ リソース インデックス (.pri) ファイルにデプロイします。 その結果、UWP アプリでは、優先カルチャのリソースが見つからない場合は、 MissingManifestResourceException 次のいずれかの条件下でスローされます。

  • アプリに .pri ファイルが含まれていないか、.pri ファイルを開けませんでした。
  • アプリの .pri ファイルには、指定されたルート名のリソース セットが含まれていません。