App_GlobalResources(ASP.NET)中的子文件夹

fra*_*lic 7 asp.net globalization resources localization internationalization

是否可以将资源文件(.resx)放在App_GlobalResources中的子文件夹中?

例如:

/App_GlobalResources/someresources/myfile.resx

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

/App_GlobalResources/othereresources/otherfile.resx

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

或者,所有.resx文件是否直接放在App_GlobalResources中?

如果可以使用子文件夹,您如何以编程方式访问子文件夹中的资源?

Tho*_*mas 12

从技术上讲,是的,这是可能的,但有一些陷阱.首先,让我举个例子.假设我的App_GlobalResources文件夹如下:

/App_GlobalResources
    /Test
        TestSubresource.resx
    TestResource.resx
Run Code Online (Sandbox Code Playgroud)

每个资源文件都有一个名为"TestString"的条目.我使用Visual Studio菜单添加了每个资源文件,因此它为我创建了一个类.默认情况下,添加到该App_GlobalResources文件夹的所有类都具有相同的命名空间Resource.所以,如果我想Test在命名空间中使用类生成器,我需要进入TestSubresource.Designer.cs文件并手动更改命名空间.一旦我这样做,我可以做以下事情:

var rootResource = Resources.TestResource.TestString;
var subResource = Resources.Test.TestSubResource.TestString;
Run Code Online (Sandbox Code Playgroud)

我也可以用它来引用它们GetGlobalResourceObject:

var rootResource = GetGlobalResourceObject( "TestResource", "TestString" );
var subResource1 = GetGlobalResourceObject( "TestSubresource", "TestString" );
Run Code Online (Sandbox Code Playgroud)

请注意,我仍然使用"TestSubresource"作为引用该文件中资源的方法,即使它位于子文件夹中.现在,其中一个问题是,所有文件必须在所有文件夹中都是唯一的,App_GlobalResources否则您的项目将引发运行时错误.如果我将名为"TestResource.resx"的资源添加到/ Test,它将抛出以下运行时错误:

无法使用资源文件'/App_GlobalResources/TestResource.resx',因为它与另一个具有相同名称的文件冲突.).

即使我更改了新资源上的命名空间,也是如此.

所以,总而言之,是的,这是可能的,但是由于App_GlobalResources文件系统允许但文件系统不允许的文件夹结构的不同部分中的两个相同命名的资源文件,因此增加了获取运行时错误的几率.