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
) を指定すると、この例外がbaseName
ResourceManager.ResourceManager(String, Assembly)スローされます。メソッド呼び出しで識別されるカルチャ固有のリソース セットが見つからないので、フォールバック リソース セットを読み込めません。 たとえば、英語 (米国) とロシア (ロシア) カルチャのサテライト アセンブリを作成しても、ニュートラル カルチャのリソース セットを指定できない場合、アプリの現在のカルチャが英語 (英国) の場合、この例外がスローされます。
MissingManifestResourceException は、0x80131532値を持つ HRESULT COR_E_MISSINGMANIFESTRESOURCE
を使用します。
MissingManifestResourceException は、参照の等価性をサポートする既定の Equals の実装を使用します。
インスタンスの初期プロパティ値の一覧についてはMissingManifestResourceExceptionを参照してください、MissingManifestResourceExceptionコンス トラクター。
Note
サテライト アセンブリが使用できない場合にアプリが失敗しないように、メイン アセンブリにはニュートラル なリソース セットを含めるようにすることをお勧めします。
ユニバーサル Windows プラットフォーム (UWP) アプリ
UWP アプリは、ニュートラル カルチャを含む複数のカルチャのリソースを 1 つのパッケージ リソース インデックス (.pri) ファイルにデプロイします。 その結果、UWP アプリでは、優先カルチャのリソースが見つからない場合は、 MissingManifestResourceException 次のいずれかの条件下でスローされます。
- アプリに .pri ファイルが含まれていないか、.pri ファイルを開けませんでした。
- アプリの .pri ファイルには、指定されたルート名のリソース セットが含まれていません。
.NET