Технически, да, это возможно, но есть некоторые подводные камни. Во-первых, позвольте мне показать вам пример. Предположим, что моя папка 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.