App_GlobalResources (ASP.NET) 中的子文件夾
是否可以將資源文件 (.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 中?
如果可以使用子文件夾,您如何以程式方式訪問子文件夾中的資源?
從技術上講,是的,這是可能的,但有一些陷阱。首先,讓我給你看一個例子。假設我的
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”的資源添加到 /Test,它將引發以下執行時錯誤:無法使用資源文件“/App_GlobalResources/TestResource.resx”,因為它與另一個同名文件衝突。)。
即使我更改了新資源的命名空間也是如此。
App_GlobalResources因此,總而言之,是的,這是可能的,但是由於文件系統允許但.NET 不允許的文件夾結構的不同部分中的兩個同名資源文件,您增加了出現執行時錯誤的機率。