У меня есть библиотека классов C#, которая содержит несколько файлов ресурсов, организованных в папках. Так как я хочу, чтобы сгенерированные классы были всеми в том же пространстве имен, я устанавливаю свойство CustomToolNamespace каждого файла ресурсов.
Однако я обнаружил через Отражатель, что, хотя классы все сгенерированы в том же пространстве имен, путь к встроенным ресурсам содержит имя каталога, в которое помещается файл ресурсов.
Например, в проекте, куда FolderCustomNamespaceRes.resx помещается в каталоге под названием Папка.
удаленная мертвая ссылка ImageShack
И где CustomToolNamespace для FolderCustomNamespaceRes.resx установлен на PublicResourcesTest, Отражатель показывает, что путем к встроенной сборке ресурсов является PublicResourcesTest. Папка. FolderCustomNamespaceRes.resources
удаленная мертвая ссылка ImageShack
Действительно ли это - ошибка, или я пропускаю что-то?
После некоторого поиска я обнаружил, что название манифеста встроенного ресурса может контролироваться путем добавления метаданных в файле .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>
Это делается автоматически IDE, так что это не ошибка, но, к сожалению, единственным способом, оказываемой, вы можете подавить это поведение, используя Resharper, как описано здесь .