214

2 つの ASP.NET Web プロジェクト (ProjectA と ProjectB) があります。ProjectA のクラスが、リソース ファイル Blah.resx を使用する ProjectB のクラスをインスタンス化すると、次のエラーが発生します。

タイプ 'System.Resources.MissingManifestResourceException' の例外が mscorlib.dll で発生しましたが、ユーザー コードでは処理されませんでした。

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

これは何が原因ですか?

このhttp://support.microsoft.com/kb/318603に関する Microsoft のサイトには、次のような記事があります 。

この問題を解決するには、フォームのクラス定義の後に表示されるように、他のすべてのクラス定義を移動します。

これは Windows フォーム プロジェクトのソリューションですが、それが Web プロジェクトにも当てはまるかどうかはわかりません。

4

32 に答える 32

269

WPF プロジェクトでこれと同じ例外が発生しました。この問題は、最近別の名前空間 ( ProblemAssembly.Supportto ProblemAssembly.Controls) に移動したアセンブリ内で発生しました。アセンブリに存在する 2 番目のリソース ファイルからリソースにアクセスしようとすると、例外が発生していました。

追加のリソース ファイルが、参照を古い名前空間名から新しい名前空間名に適切に移動していないことがわかりました。

リソース ファイルの designer.cs には、ResourceManager を取得するための静的プロパティがあります。そのゲッター内では、文字列はまだ古い名前空間を参照していました。新しい名前空間に修正すると、問題は解決しました。

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Support.Properties.Stuff", typeof(Stuff).Assembly);

になるはずだった:

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Controls.Properties.Stuff", typeof(Stuff).Assembly);

これが次の人に役立つことを願っています。

于 2011-05-11T19:06:23.047 に答える
122

私はこのような問題を解決しました:

  1. ResourceFileを右クリックします
  2. 「BuildAction」プロパティCompileを「EmbeddedResource」に変更します
  3. 次に、ビルドして実行します

それは完璧に動作します。

于 2012-08-08T12:42:26.270 に答える
31

ある C# プロジェクトの resource.resx ファイルを別の C# プロジェクトと共有しようとすると、この問題が発生しました。Form クラスをファイルの先頭に移動するという提案は適切ではありませんでした。これが私がそれを解決した方法です。基本的に、2 番目のプロジェクトから最初のプロジェクトへのリンクを使用してから、resource.designer.csファイルの再生成を有効にします。

  1. 2 番目のプロジェクトのProperties/Resources.resxファイルを削除します
  2. 最初のプロジェクトのProperties/Resources.resxファイルをリンクとして2 番目のプロジェクトのプロパティ フォルダーに追加します。プロジェクトのルート レベルに追加しないでください。
  3. Properties/Resources.designer.cs最初のプロジェクトの!
  4. 2 番目のプロジェクトの のプロパティで、CustomTool としてResources.resx追加します。ResXFileCodeGenerator
  5. を右クリックし、Resources.resx[カスタム ツールの実行] を選択します。これにより、新しい designer.cs ファイルが生成されます。

注: resource.designer.cs ファイルは自動生成されるため、編集は避けます。

于 2013-07-12T20:11:19.243 に答える
16

私の場合、よく考えられていない一連のグローバル テキスト置換により、リソース デザイナー cs ファイルのこの行が誤って変更されました。

ここに画像の説明を入力

その引数の名前空間がクラスの名前空間と一致しなくなったため、アプリケーションは実行時に混乱しました。

デザイナーの名前空間がその行の文字列引数と一致することを確認してください。

于 2016-04-07T18:20:24.487 に答える
12

*.resхが移行から除外されているために発生します。

  • ResourceFile を右クリック
  • メニュー項目「プロジェクトに含める」をクリックします
于 2016-12-09T11:25:41.943 に答える
6

リソース ファイルが保存されているプロジェクトに移動し、その ItemGroup までスクロールして、コンパイラが期待するパスに対応する論理名を追加することで、これを解決しました。

私の EmbeddedResource は次のようになりました。

   <ItemGroup>
    <EmbeddedResource Update="Properties\TextResources.resx">
      <Generator>PublicResXFileCodeGenerator</Generator>
      <LastGenOutput>TextResources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>

今、それはこのように見えます

  <ItemGroup>
    <EmbeddedResource Update="Properties\TextResources.resx">
      <Generator>PublicResXFileCodeGenerator</Generator>
      <LastGenOutput>TextResources.Designer.cs</LastGenOutput>
      <LogicalName>MyProject.Properties.Resources.resources</LogicalName>
    </EmbeddedResource>
  </ItemGroup>
于 2018-04-28T17:53:23.037 に答える
5

シビ・エランゴスの答えだけでは不十分だったので、次のことをしなければなりませんでした。

  • ResourceFile を右クリック
  • 「ビルド アクション」プロパティを変更する
  • 「埋め込みリソース」にコンパイル
  • ビルドとデプロイ

/binこれにより、フォルダーにApp_GlobalResources が生成され、そのフォルダーも Web アプリケーションのルートにコピーされます。

于 2016-08-05T17:06:30.107 に答える
5

私の場合、クラス定義の順序が間違っているために発生した問題です。たとえば、Form クラスの前に別のクラス定義を追加しました。

namespace MyBuggyWorld
{
    public class BackendObject //This hack broke the VS 2017 winform designer and resources linker!
    {
        public TcpClient ActiveClient { get; set; }
        public BackgroundWorker ActiveWorker { get; set; }
    }

    public partial class FormMain : Form
    {
    }
}

ファイルの最後に移動BackendObjectした後 (別のファイルに移動したほうがよいでしょう)、プロジェクトのクリーンアップと再構築を行うと問題が解決しました。

于 2018-02-08T03:36:32.223 に答える
4

このケースに関する限り、リソースを含むアセンブリのデフォルトの名前空間が同じテキストに設定されているかどうかを確認します (VS では [プロジェクト] -> [プロパティ] -> [デフォルトの名前空間])。resx ファイルの BuildAction プロパティが "Embedded" に設定されているかどうかも確認しますリソース"お楽しみください... ;)

于 2014-12-18T08:52:24.617 に答える
3

1 つのアプローチは、共有クラス/リソースを別のクラス ライブラリ プロジェクトに配置し、両方の Web サイトでそれらを参照することです。

于 2010-02-08T11:34:28.670 に答える
3

ありがとう@CFinck!他の人にヒントを追加するだけです: ResourceManager 行を次のように変更しました:

New Global.System.Resources.ResourceManager(Reflection.Assembly.GetCallingAssembly.GetName.Name & ".CommonNameOf.Resources", Reflection.Assembly.GetCallingAssembly())

私は vb.net にいますが、C# では文字列を連結するための & の代わりに + が唯一の違いだと思います。

このようにして、リソースを共有する 2 つの同様のプロジェクトで同じリンクされたアセンブリ ファイルを使用できます。

于 2011-11-11T19:23:59.500 に答える
3

ちょうど別のケース。2 つのプロジェクトを含むソリューションをコピーし、Windows エクスプローラーで部分的に名前を変更し (フォルダー名、.sln および .csproj ファイル名)、部分的に Visual Studio の大規模な検索と置換アクション (名前空間など) で名前を変更しました。それにもかかわらず、OPによって述べられた例外はまだ発生しました。アセンブリと名前空間の名前がまだ古いことがわかりました。

プロジェクトと他のすべては既にOfficeStyleという名前でしたがAssembly nameDefault namespaceそれでもLinckusという名前でした。

古い状況

この修正の後、すべてが再び正常に機能し、コンパイルして実行します:)

新しい状況

于 2019-08-09T08:21:13.187 に答える
2

resx デザイナー ファイルはリフレクションに依存しているため、このエラーは Dotfuscation によっても発生します。Dotfuscator を使用している場合、resx ファイルが破損します。難読化プロセスからの除外として常にそれらを追加する必要があります。

于 2012-09-20T20:31:35.750 に答える
2

私にとっての問題は、あるプロジェクトから別のプロジェクトに .resx ファイルと関連する .cs ファイルをコピーすることでした。どちらのプロジェクトも同じ名前空間を持っていたので、それは問題ではありませんでした。

ソリューション エクスプローラーで、元のプロジェクトで .resx ファイルが .cs ファイルに依存していることに気付いたときに、最終的に解決しました。

MyResource.cs
|_ MyResource.resx

コピーされたプロジェクトでは、.cs ファイルは .resx ファイルに依存していました。

MyResource.resx
|_ MyResource.cs

2 番目のプロジェクトでは、何らかの方法で .resx ファイルが .cs ファイルを自動生成するように設定されていたことが判明しました。自動生成された .cs ファイルは、元のプロジェクトからコピーされた .cs ファイルを上書きしていました。

この問題を解決するには、コピーしたプロジェクトの各 .resx ファイルのプロパティを編集します。Custom ToolプロパティはResXFileCodeGeneratorのようなものに設定されます。.resx ファイルのカスタム ツールプロパティをクリアします。自動生成されたファイルによって上書きされるため、元のプロジェクトから .cs ファイルを再コピーする必要があります。

于 2015-04-01T09:27:34.317 に答える
1

ソリューションに単一のプロジェクトを持つ WinForms アプリケーションがあります。IDE として 使用
するターゲティング.NET Framework 4.0
SharpDevelop 4.3

ばかげているように聞こえますが、たまたまファイルでLogical Nameプロパティを に設定し"Resources"ていました。"Resources.resx"そのプロパティをクリアすると、すべてがうまく機能します。

通常、ランダムなファイルを として追加する場合、通常はを適切なものEmbeddedResourceに設定する必要があります。Logical Name何らかの理由で、Resources.resxファイルに対して同じことを行ったためにすべてが台無しになりました...

これが誰かに役立つことを願っています。

于 2014-06-10T20:49:39.583 に答える
-1

プロジェクト B の DLL を参照しているからといって、プロジェクト A のリソース マネージャーがプロジェクト B の App_GlobalResources ディレクトリを認識しているとは限りません。

Web サイト プロジェクトまたは Web アプリケーション プロジェクトを使用していますか? 後者の場合、Visual Studio でソース コード ファイルをリンクできるはずです (前者についてはわかりません。私は使用したことがありません)。これはあまり知られていない便利な機能で、ここで説明します。これにより、プロジェクト B のリソース ファイルをプロジェクト A にリンクできます。

于 2010-01-28T15:23:13.983 に答える