Start Debugging
2020-11-20 Обновлено 2023-11-05 csharp Edit on GitHub

Получение Stream встроенного ресурса в .NET Core

Узнайте, как получить поток встроенного ресурса в .NET Core, разобравшись, как формируется имя ресурса, и используя GetManifestResourceStream.

Чтобы получить встроенный ресурс в .NET Core, сначала нужно понять, из чего состоит имя ресурса. Оно состоит из 3 элементов, соединённых точками (.):

Возьмём конкретный пример. У нас есть проект (сборка) с корневым namespace MyApp.Core. Внутри проекта есть папка и подпапка Assets > Images. А в ней лежит встроенный ресурс с именем logo.png. В этом случае:

Соедините их через . и получите: MyApp.Core.Assets.Images.logo.png.

Когда вы знаете идентификатор ресурса, вам нужна лишь ссылка на сборку, в которой находится сам ресурс. Её легко получить от любого класса, объявленного в этой сборке - допустим, у нас есть класс MyClass:

typeof(MyClass).Assembly.GetManifestResourceStream("MyApp.Core.Assets.Images.logo.png")

Получение списка всех встроенных ресурсов сборки

Если ресурс не находится, это обычно происходит по одной из следующих причин:

Чтобы упростить отладку, можно вывести список всех встроенных ресурсов сборки и плясать от него. Для этого:

typeof(MyClass).Assembly.GetManifestResourceNames()

Это вернёт обычный string[], который удобно использовать в Immediate Window для отладки.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад