私のWebプロジェクトでは、App_GlobalResources
フォルダー内の4つのリソースファイルを使用しています。それらの1つ(lang.resx
)は、プロジェクトに到着する前に作成されています。正しい名前空間(WebApplication.App_GlobalResources
)とアクセス修飾子:public
を持っています。
一方、作成したばかりの3つの他のリソースファイルには、異なる名前空間(Resources
)とinternal
アクセス修飾子があり、Visualからのリソースファイルフォームでは変更できません。無効になっているためスタジオ。 designer.csファイルで直接変更しようとすると、ファイルの次の保存時に変更がキャンセルされます。
これは重大なバグではありませんが、プロジェクトの他の開発者が異なるネームスペースを見つけて、使用するリソースファイルの修飾子にアクセスすることは誤解を招く可能性があります。
問題がどこにあるのかは完全にはわかりませんが、コードの生成に使用するツールを変更することで解決できることを伝えることができます。
この記事 を追おうとしたとき、私はこの問題につまずいた。著者が示唆したようにソースファイルをダウンロードした後、既に存在するリソースファイルの「カスタムツール」プロパティに「PublicResXFileCodeGenerator」というクラスがあることに気付きました。また、「ビルドアクション」プロパティは「埋め込みリソース」に設定されていましたが、それが問題の一部であるかどうかはわかりません。
作成した新しいリソースファイルはすべて、カスタムツール「GlobalResourceProxyGenerator」を使用しました。前述の「PublicResXFileCodeGenerator」でこれを上書きした後、実際の問題が何であれ、問題を解決するように見えました。
また、現在のリソースファイルは「2.0」形式でしたが、新しいファイルは「1.3」形式でした。 XMLエディターを使用して(またはVisual Studio自体から "with with"を使用して)resxファイルを開くと、これを確認できます。
このように機能させることができればいいのですが、理想的ではありません。 Visual Studio 2008およびSP1のインストールの問題、またはそのようなものである可能性があります。
更新:
このブログエントリ も役立つ場合があります。
簡単な答えは次のとおりです。リソースファイルのプロパティを開き、Custom Tool Namespace
必要な名前空間に。
そのような単純な。
または、CustomTool属性を変更できます(VS2010でテスト済み)。
リソースファイルのファイルプロパティを開き、「カスタムツール」を「GlobalResourceProxyGenerator」から「PublicResXFileCodeGenerator」に変更するだけです。これは、ローカルリソースファイルのデフォルトツールです。次に、「Build Action」を「Embedded Resource」に変更する必要があります。ファイルに適切にアクセスするために、「リソース」などの適切なカスタムツール名前空間を割り当てることもできますが、これは必要ではありません...
Resxは、Visual Studioプロジェクト構成で指定された名前空間に応じて名前空間を選択します。適切な名前空間を持つようにプロジェクトを更新すると、resxはそれを継承する必要があります(新しいものは確かに、既存のものが修正されるかどうかはわかりません-すべきです)。
リソースファイルアクセス修飾子は.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>