web-dev-qa-db-ja.com

リソースファイル(resx)名前空間とアクセス修飾子の変更

私のWebプロジェクトでは、App_GlobalResourcesフォルダー内の4つのリソースファイルを使用しています。それらの1つ(lang.resx)は、プロジェクトに到着する前に作成されています。正しい名前空間(WebApplication.App_GlobalResources)とアクセス修飾子:publicを持っています。

一方、作成したばかりの3つの他のリソースファイルには、異なる名前空間(Resources)とinternalアクセス修飾子があり、Visualからのリソースファイルフォームでは変更できません。無効になっているためスタジオ。 designer.csファイルで直接変更しようとすると、ファイルの次の保存時に変更がキャンセルされます。

これは重大なバグではありませんが、プロジェクトの他の開発者が異なるネームスペースを見つけて、使用するリソースファイルの修飾子にアクセスすることは誤解を招く可能性があります。

51
Michael Pereira

問題がどこにあるのかは完全にはわかりませんが、コードの生成に使用するツールを変更することで解決できることを伝えることができます。

この記事 を追おうとしたとき、私はこの問題につまずいた。著者が示唆したようにソースファイルをダウンロードした後、既に存在するリソースファイルの「カスタムツール」プロパティに「PublicResXFileCodeGenerator」というクラスがあることに気付きました。また、「ビルドアクション」プロパティは「埋め込みリソース」に設定されていましたが、それが問題の一部であるかどうかはわかりません。

作成した新しいリソースファイルはすべて、カスタムツール「GlobalResourceProxyGenerator」を使用しました。前述の「PublicResXFileCodeGenerator」でこれを上書きした後、実際の問題が何であれ、問題を解決するように見えました。

また、現在のリソースファイルは「2.0」形式でしたが、新しいファイルは「1.3」形式でした。 XMLエディターを使用して(またはVisual Studio自体から "with with"を使用して)resxファイルを開くと、これを確認できます。

このように機能させることができればいいのですが、理想的ではありません。 Visual Studio 2008およびSP1のインストールの問題、またはそのようなものである可能性があります。

更新:

このブログエントリ も役立つ場合があります。

44

簡単な答えは次のとおりです。リソースファイルのプロパティを開き、Custom Tool Namespace必要な名前空間に。
そのような単純な。

66
Mark Bonafe

または、CustomTool属性を変更できます(VS2010でテスト済み)。

リソースファイルのファイルプロパティを開き、「カスタムツール」を「GlobalResourceProxyGenerator」から「PublicResXFileCodeGenerator」に変更するだけです。これは、ローカルリソースファイルのデフォルトツールです。次に、「Build Action」を「Embedded Resource」に変更する必要があります。ファイルに適切にアクセスするために、「リソース」などの適切なカスタムツール名前空間を割り当てることもできますが、これは必要ではありません...

ソース

11
Joost Schepel

Resxは、Visual Studioプロジェクト構成で指定された名前空間に応じて名前空間を選択します。適切な名前空間を持つようにプロジェクトを更新すると、resxはそれを継承する必要があります(新しいものは確かに、既存のものが修正されるかどうかはわかりません-すべきです)。

6
psychotik

リソースファイルアクセス修飾子は.csprojにあります。

.csprojファイルを直接変更すると、この問題を回避できます。

<Generator>要素を探し、以下の例に従ってその値を設定します。

internal修飾子を持つリソースファイルは次のようになります。

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>ResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>

public修飾子を持つリソースファイルは次のようになります。

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>PublicResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>
4
Luis Filipe