指定されたカルチャーまたはニュートラルカルチャーに適したリソースが見つかりませんでした


194

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プロジェクトにも当てはまるかどうかはわかりません。


これらはどのような種類のプロジェクトですか?2つのウェブサイト?1つのWebサイト、1つのクラスライブラリ?
Ruddy、

2つのASP.NET Webサイトプロジェクト。
dev.e.loper 2010年

11
To resolve this problem, move all of the other class definitions so that they appear after the form's class definition.これの+1は私の問題を解決しました。
OmarOthman、2011年

1
Windows.Forms ProjectのMicrosoft Helpリンクで質問の定義を+1すると、問題が解決しました。
DarrenMB 2014年

この答えは私にとって問題を解決しました!GetGlobalResourceObject
DanielV

回答:


257

WPFプロジェクトでこれと同じ例外を見つけました。この問題は、最近別の名前空間(ProblemAssembly.Supportから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);

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


5
+1デザイナファイルで原因を特定する場所の適切な説明。あなたのおかげで、同じ問題が見つかり、修正されました:)
コーディング終了

1
リンク:ResourceManagerクラスのMSDNドキュメント。
Boinst 2012

3
ありがとう、この問題を解決するのに役立ちました。デザイナファイルを削除してから開き、resxファイルを保存して、デザイナファイルを正しく再生成することもできます。
セルジュ

1
同じ問題があり、これが私が探していた答えでした。残念ながら、コンパイル時に表示されません:-(ありがとう
noob

2
この問題もありましたが、プロジェクトの名前空間の最後の部分と同じ名前のサブフォルダーを追加したため、project.folder.classではなくproject.folder.folder.classを探していました。私はそれをルートに移動しました、そしてそれは整列して動作します!
SelAromDotNet 2015

115

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

  1. ResourceFileを右クリックします
  2. 「ビルドアクション」プロパティのコンパイルを「組み込みリソース」に変更します。
  3. 次にビルドして実行します

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


@sibi Elango ResourceFileを右クリックしましたが、ビルドアクションパーツが見つかりません。
S5498658

1
@ S5498658これがコンテキストメニュー(右クリック)に表示されない場合は、[プロパティ]パネル(通常はソリューションエクスプローラーの下にあります)を確認します。
定義

そのビルドアクションがまだ機能していません。また、ディレクトリを確認しましたが、ディレクトリはプロパティで同じです。
アルバトロス

1
答えがこのソリューションが機能する理由を説明しているならそれは素晴らしいでしょう。
Luis Teijon 2017年

これはすごいです
code4j 2017

22

ある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ファイルは自動生成されるため、編集は避けます。


12

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

ここに画像の説明を入力してください

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

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


1
まさに私の問題でした。共有してくれてありがとう!
AcidJunkie 2016年

ここで同じ:PCLから.NET Standardに移行した後、一時的なプロジェクトと名前空間を作成し、そこにすべてのポータブルファイルをコピーし、ポータブルプロジェクトを削除し、名前空間を元に戻しましたが、この行には一時ファイルがまだ含まれていました。移行プロセスからの名前空間。
Zerga 2018年

11

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

  • ResourceFileを右クリックします
  • メニューの「プロジェクトに含める」をクリックします

2
これで解決しました。通常、resxファイルは自動的に追加されます。プロジェクトファイルを変更し、移行を手動で追加する必要があるマージを実行したので、おそらくそれと何か関係があったのでしょう
smarty

私のために働いた。各移行のすべての* .resxファイルを追加する必要があります。ありがとう
m.rufca

7

名前空間のリファクタリング(CFinckの回答による)に従って、designer.csファイルを削除し、resxファイルをプロジェクトから除外してから再度含めると、この種の問題が解決されることがよくありました。


これは私のために何をしたのですか!(関連しているように見えるCFinckの回答を試してみましたが、機能しませんでした)
2015年

確かに最速のソリューションの1つ
Lorenz Lo Sauer

6

誰もこの解決策について言及していないようです。本当に明白ですが、ちょっと私をつまずかせました...

新しいリソースファイルのデフォルトのアクセス修飾子はInternal(またはFriendVB.Net内)です。これを次のように変更してください。Public

(resxデザイナーでは、アクセス修飾子の上部にドロップダウンがあります)


4

シビエランゴスの答えだけでは十分ではなかったので、

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

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


4

私の場合、クラスを間違った方法で定義することによって引き起こされた問題:

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最後に再割り当てした後(ファイルを分離する方が良い)、プロジェクトのクリーン+リビルドを実行すると問題が解決しました。


1
うわー、私はファイルの先頭に間違ったクラスがあると物事がひどく壊れることに気づきませんでした。
BrainStorm.exe

4

これを解決するには、リソースファイルが保存されているプロジェクトに移動し、その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>

3

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


1
こんにちは、デフォルトの名前空間(xxx)のテキストは、コードと同じである必要があるという意味 Assembly localisationAssembly = Assembly.Load("xxx"); ResourceManager resourceManager = new ResourceManager("xxx", localisationAssembly);
ですか?

2

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


2
確かにこれは同じ問題ですね。
ブレットリグビー

2

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

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

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

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


1

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


1

使っていたとき

HttpContext.GetGlobalResourceObject()

その呼び出しをtry / catchステートメント内にラップしない限り、エラーが発生します。


1

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

ばかげて聞こえますが、たまたまファイルのLogical Nameプロパティを設定し"Resources"まし"Resources.resx"た 私がその資産をクリアすると、すべてがおかしくなりました。

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

これが誰かを助けることを願っています。


これもあるようです。名前付けの矛盾は、私が推測すると思いますが、良い発見です!
トレント

1

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

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

MyResource.cs
|_ MyResource.resx

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

MyResource.resx
|_ MyResource.cs

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

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


1

私の場合、同じファイル内のWindowsフォームの上に新しいクラスを配置しました。

新しく追加されたクラスをそのファイルから移動すると、問題が解決しました。

こちらをご覧ください:http : //i.stack.imgur.com/wVu6c.png


1
Stackoverflowへようこそ!共有するコードがある場合は、画像として投稿しないでください。投稿に追加して、コードとしてフォーマットできます
FelixSFD 2016

提案をありがとう@FelixSFD
Petre

1

これは、名前空間の不一致が原因である可能性があります。上から2番目の回答(Sibi Elango's)は、resxファイルを右クリックして、BuildオプションをEmbeddedResourceに変更するように言っていますが、私はすでにそれを行っていて、それでもエラーが発生しました。上の答え(CFinckの)は、ファイルを手動で編集することでこれを修正する方法を示していますが、MonoDevelopでこの問題があり、デフォルトの名前空間を、リソースを呼び出すcsファイル(ファイル以下のコードなどのコードが含まれています)...

this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

GUIを介してデフォルトの名前空間を設定した後、上の行で例外が発生しなくなりました。


1

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

プロジェクトおよび他のすべては、すでに命名されましたがOfficeStyleAssembly nameDefault namespace、まだ命名されたLinckus

古い状況

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

新しい状況


0

私の場合、これらのコード行はWeb.config多くのことを助けました:

<system.web>
     ...
    <globalization uiCulture="cs" culture="cs-CZ" />
     ...
<system.web>

ビルドアクションとともに:Embedded Resourceおよびカスタムツール:PublicResXFileCodeGenerator


0

アプリケーションセクションのプロパティをダブルクリックして、アセンブリ名デフォルトの名前空間が同じであることを確認します


0

私も同じ問題に直面しており、回答に記載されているすべての解決策を試しましたが、どれも機能していないようです。TFSへのコードのチェックイン中にそれが判明しました。TFSはResxファイルをチェックインせず、デザイナファイルでのみチェックインしました。そのため、他のすべての開発者は、自分のマシンで実行中にこの問題に直面していました。手動でresxファイルをチェックインする


「チェックイン」とはどういう意味ですか?
Fandango68

ファイルをTFSにプッシュする
カヤニ2018年

0

これは、メインのwinformクラス(たとえば、Form1)の上にクラスを配置するときにも発生する可能性があります。これは、レンダリングに失敗するため、デザインを見るとわかります。


0

さらに別の原因:名前空間にハイフン( "-")が含まれている場合、名前空間は正しく構築および実行されますが、リソースにアクセスできません。名前空間(識別子)にハイフンを付けることは想定されていませんが、これはリソースの読み込み以外では強制されないようです。これにより、この10年間で2回火傷を負った。


0

チェックするもう1つのことは、EmbeddedResourceでLogicalNameまたはManifestResourceNameが定義されているかどうかです。プロジェクトファイルがそれらを使用している場合は、それらが適切に定義されていることを確認してください。予期しない名前でリソースが存在する可能性があるためです。


0

移行コマンドを実行すると、この問題が発生しました。Update-Databaseパッケージマネージャーコンソール。

受け入れられた答えは私の問題を解決しませんでした。

ビルドアクションをからに変更する必要CompileEmbedded Resourceあり、それは私のために働いた。

以下の手順で同じことができます:

  1. 移行を右クリックします。
  2. 「ビルドアクション」プロパティの「コンパイル」を「埋め込みリソース」に変更します。
  3. Update-Databaseコマンドを実行します。

0

.NET Core 3.0でこの問題に直面しているユーザーの場合、これは.NET Core 3.0で行われた重大な変更に関連している可能性がありEmbeddedResourceUseDependentUponConvention、プロジェクトcsprojでfalseに設定するだけで解決できます。

<PropertyGroup>
  <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>


-1

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.