Изменяем Имена Встроенных Ресурсов в .NET
Когда вы используете встроенные ресурсы (embedded resources) в проекте .NET, имя ресурса вычисляется на основе пути к файлу. По умолчанию используется формат, вроде <Имя сборки>.<Путь к файлу>. Но путь к файлу не содержит разделителя пути (/ или \). Вместо этого разделитель пути заменяется точкой. Например, для файла resources/index.html:
<Project>имя ресурса будет
<ItemGroup>
<EmbeddedResource Include="resources\index.html" />
</ItemGroup>
</project>
MyProject.resources.index.htmlВы можете вывести список встроенных ресурсов, используя метод GetManifestResourceNames класса Assembly.
foreach(var name inПример вывода:
Assembly.GetExecutingAssembly()
.GetManifestResourceNames())
{
Console.WriteLine(name);
}
MyProject.resources.favicon.icoОднако вы не можете быть на 100% уверены, как читать встроенные ресурсы, поскольку такое именование может вызывать конфликты.
MyProject.resources.img.background.png
MyProject.resources.index.html
Можно изменить имена встроенных ресурсов, используя LogicalName:
<Project>Если добавить это в проект и снова выполнить код выше, получится что-то вроде этого:
<ItemGroup>
<EmbeddedResource Include="Resources/**/*">
<LogicalName>
$([System.String]::new('%(RelativeDir)').Replace('\','/'))%(FileName)%(Extension)
</LogicalName>
</EmbeddedResource>
</ItemGroup>
</Project>
Resources/favicon.icoИспользуя такое сопоставление, гораздо проще создать виртуальную файловую систему из встроенных ресурсов, поскольку имена файлов соответствуют фактической файловой иерархии.
Resources/img/background.png
Resources/index.html
Источник: https://www.meziantou.net/customizing-the-embedded-resource-name-in-dotnet.htm