Создание ресурса Visual Studio - пользовательское пространство имен

У меня есть библиотека классов С#, которая содержит несколько файлов ресурсов, организованных в папках. Поскольку я хочу, чтобы сгенерированные классы были в одном пространстве имен, я устанавливаю свойство CustomToolNamespace для каждого файла ресурсов.

Однако я обнаружил через Reflector, что, хотя классы все сгенерированы в одном пространстве имен, путь к встроенным ресурсам содержит имя каталога, в которое помещается файл ресурса.

Например, в проекте, где FolderCustomNamespaceRes.resx помещается внутри каталога с именем Folder.

удалена мертвая ссылка ImageShack

И где CustomToolNamespace для FolderCustomNamespaceRes.resx установлен в PublicResourcesTest, Reflector показывает, что путь к встроенной сборке ресурсов - PublicResourcesTest. Папка.FolderCustomNamespaceRes.resources

удалена мертвая ссылка ImageShack

Является ли это ошибкой или я что-то не хватает?

Ответ 1

После некоторого поиска я узнал, что имя манифеста встроенного ресурса можно контролировать, добавляя метаданные в файл .cspproj.

Прежде чем вы получите что-то вроде:

<EmbeddedResource Include="Folder\FolderCustomNamespaceRes.resx">
   <Generator>PublicResXFileCodeGenerator</Generator>
   <LastGenOutput>FolderCustomNamespaceRes.Designer.cs</LastGenOutput>
   <CustomToolNamespace>PublicResourcesTest</CustomToolNamespace>
</EmbeddedResource>

И для управления именем манифеста вы должны добавить:

<EmbeddedResource Include="Folder\FolderCustomNamespaceRes.resx">
   ....
   <LogicalName>$(RootNamespace).FolderCustomNamespaceRes.resources</LogicalName>
</EmbeddedResource>

Ответ 2

Это делается автоматически с помощью IDE, так что это не ошибка, но, к сожалению, единственный способ показать, что вы можете подавить это поведение, - это использовать ReSharper, как описано здесь.