MissingManifestResourceException の意味と修正方法を教えてください。質問する

MissingManifestResourceException の意味と修正方法を教えてください。質問する

状況:

  • と呼ばれるクラスライブラリがありRT.Servers、そこにはいくつかのリソース(タイプ ですbyte[]が、これは重要ではないと思います)が含まれています。
  • 同じクラスライブラリには、これらのリソースの1つを返すメソッドが含まれています。
  • 私はその単一のメソッドだけを呼び出す単純なプログラム(そのライブラリを参照)を持っています

MissingManifestResourceException次のメッセージが表示されます:

指定されたカルチャまたはニュートラル カルチャに適したリソースが見つかりませんでした。コンパイル時に「Servers.Resources.resources」がアセンブリ「RT.Servers」に正しく埋め込まれたかリンクされたか、または必要なすべてのサテライト アセンブリが読み込み可能で完全に署名されていることを確認してください。

私はカルチャーやアセンブリ署名を扱ったことがないので、ここで何が起こっているのかわかりません。また、これは同じライブラリを使用する別のプロジェクトでは機能します。何かアイデアはありますか?

ベストアンサー1

この問題を解決するには、Resources.resxソリューションエクスプローラーでファイルを右クリックして、カスタムツールを実行する自動生成されたResources.Designer.csファイルが再生成されます。

.resx ファイルをプロジェクトに手動で追加した場合は、ファイルのカスタム ツール プロパティを "ResXFileCodeGenerator" に設定する必要があります。

この問題は、名前空間の不一致が原因で発生します。これは、プロジェクト設定でアセンブリの「既定の名前空間」を変更すると発生します。(私は (以前) から ("Servers"現在) に変更しました"RT.Servers"。)

の自動生成されたコードにはResources.Designer.cs、次のコードがあります。

internal static global::System.Resources.ResourceManager ResourceManager {
    get {
        if (object.ReferenceEquals(resourceMan, null)) {
            global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Servers.Resources", typeof(Resources).Assembly);
            resourceMan = temp;
        }
        return resourceMan;
    }
}

リテラル文字列"Servers.Resources"を に変更する必要がありました"RT.Servers.Resources"。私はこれを手動で行いました。ただし、カスタム ツールを実行しても同様に実行できます。

おすすめ記事