質問

App_GlobalResources内のサブフォルダ内のリソースファイル(.resxファイル)を配置することは可能ですか?

例えば、

  

/App_GlobalResources/someresources/myfile.resx

     

/App_GlobalResources/someresources/myfile.fr-fr.resx

     

/App_GlobalResources/othereresources/otherfile.resx

     

/App_GlobalResources/othereresources/otherfile.fr-fr.resx

それとも、App_GlobalResources?

内に直接配置されるすべての.resxファイルです

それはサブフォルダを使用することが可能である場合は、サブフォルダ内あなたのプログラムからアクセスリソースをどうすればよいですか?

役に立ちましたか?

解決

技術的には、はい、それは可能ですが、いくつかの落とし穴があります。まず、私はあなたに例を示しましょう。ルックスがとても好きなフォルダに私App_GlobalResourcesを仮定します:

/App_GlobalResources
    /Test
        TestSubresource.resx
    TestResource.resx
各リソースファイルには、「たTestString」と呼ばれる単一のエントリーがあります。それは私のためにクラスを作成しましたので、私は、Visual Studioのメニューを使用して、各リソースファイルを追加しました。デフォルトでは、App_GlobalResourcesフォルダに追加されたすべてのクラスがResourceの同じ名前空間を持つことになります。私はクラスの発電機を使用したいと私は名前空間にTestをしたいのであれば、私はTestSubresource.Designer.csファイルに移動して、手動で名前空間を変更する必要があります。私はそれを行うならば、私は次の操作を行うことができます:

var rootResource = Resources.TestResource.TestString;
var subResource = Resources.Test.TestSubResource.TestString;

私もGetGlobalResourceObjectを使用してそれらを参照することができます:

var rootResource = GetGlobalResourceObject( "TestResource", "TestString" );
var subResource1 = GetGlobalResourceObject( "TestSubresource", "TestString" );
私はまだそれがサブフォルダにあるにもかかわらず、そのファイル内のリソースを参照するための手段として「TestSubresource」を使用することを

に注意してください。さて、キャッチの一つは、ランタイムエラーをスローしますすべてのファイルがApp_GlobalResourcesまたはプロジェクト内のすべてのフォルダで一意でなければならないということです。私は/テストに「TestResource.resx」という名前のリソースを追加した場合、それは、次のランタイムエラーがスローされます。

  

リソースファイル「/App_GlobalResources/TestResource.resxは」にすることはできません   それは、同じ名前を持つ別のファイルと競合するとして、使用していました。)。

これは私が新しいリソースの名前空間を変更する場合でも同じです。

そうは、結論で、はい、それは可能ですが、理由は、.NETによって、ファイルシステムで許可されていないが、App_GlobalResourcesフォルダ構造の異なる部分に2つの同じ名前のリソースファイルの実行時のエラーを取得する確率を高めますます。

他のヒント

それは可能です。少なくとも、私はそれを行うために管理します。

ウェブサイト内では、私はApp_GlobalResourcesフォルダを追加しました。その中に私は別のフォルダ「はMyFolder」と置かれMyResource.resxファイルの内部を作成しました。 RESXファイルは、1つのペアMyKey1が含まれて - 。MyValue1

私は成功した名前を「MyValue1」を抽出し、次のクラスのGetResourceメソッドを使用して=「MyKey1」

static class Class1 {

    static Assembly FindGlobalResAssembly() {
        foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
            if(asm.FullName.StartsWith("App_GlobalResources."))
                return asm;
        }
        return null;
    }

    public static object GetResource(string name) {
        Assembly asm = FindGlobalResAssembly();
        if(asm == null)
            return null;
        return new ResourceManager("Resources.MyResource", asm).GetObject(name);
    }

}

このアプローチはまた、中型の信頼で動作します。

これはコードからリソースにアクセスする際にフォルダが違いはありませんと思われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top