TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1411 1.75K
День 1145. #ЗаметкиНаПолях
Использование Встроенных Файлов в dotnet core
Мы хотим прочитать файл JSON с диска. Мы не хотим полагаться на абсолютные пути к файлам, параметрам среды, копировать файлы в выходной каталог и т.п. Файл JSON выглядит следующим образом:
file.json
{
"data": true
}

Можно использовать функцию EmbeddedResource. Тогда при сборке проекта файл json будет включён в dll. Чтобы пометить файл как EmbeddedResource, вы просто добавляете его в свой .csproj следующим образом:
<ItemGroup>
<EmbeddedResource Include="Data\file.json" />
</ItemGroup>

Теперь посмотрим, как можно прочитать этот файл. При работе со встроенными файлами нам понадобится сборка, в которой мы будем искать встроенные ресурсы. Рассмотрим следующий интерфейс, содержащий методы для чтения встроенных ресурсов тремя различными способами
public interface IEmbeddedResourceQuery
{
// изнутри сборки
Stream? Read<T>(string resource);
// из заданной сборки
Stream? Read(Assembly a, string resource);
// из сборки по имени сборки
Stream? Read(string name, string resource);
}

Для получения потока для чтения ресурса можно использовать метод GetManifestResourceStream сборки. Ещё одна важная деталь — это то, как строится путь для чтения ресурса. Нам нужно указать имя сборки (MyLibrary), а затем использовать запись пути через точку:
Assembly_name.Folder.Filename
Например, для файла file.json в папке Data путь будет:
MyLibrary.Data.file.json

public class EmbeddedResourceQuery
: IEmbeddedResourceQuery
{
public Stream? Read<T>(string resource)
{
var a = typeof(T).Assembly;
return ReadInternal(a, resource);
}

public Stream? Read(
Assembly a, string resource)
{
return ReadInternal(a, resource);
}

public Stream? Read(
string name, string resource)
{
var a = Assembly.Load(name);
return ReadInternal(a, resource);
}

internal static Stream? ReadInternal(
Assembly a, string resource)
{
return assembly
.GetManifestResourceStream(
$"{a.GetName().Name}.{resource}");
}
}

Использование
var q = new EmbeddedResourceQuery();

// изнутри сборки
var s1 = q.Read<MyType>("Data.file.json ");

// из заданной сборки
var a = Assembly.Load("MyLibrary");
var s2 = q.Read(a, "Data.file.json ");

// из сборки по имени сборки
var s3 = q.Read("MyLibrary", "Data.file.json");

Источник: https://josef.codes/using-embedded-files-in-dotnet-core/
  • 👍 11
More from @netdeveloperdiary
  1. Oct 16, 2026День 2816. #Карьера #AI Станет ли ИИ-Кодинг Концом Программирования для Людей? Автор ориги…
  2. Oct 15, 2026Post #3374
  3. Oct 14, 2026Post #3373
  4. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  5. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  6. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →