.NET 5 исключает некоторые библиотеки из публикации в один файл

У меня небольшая проблема с публикацией одного исполняемого файла с помощью.NET 5.
Фактически, он не включает все библиотеки в исполняемый файл и создает несколько файлов.

В моем примере я использую библиотеку для SQLite (Microsoft.Data.Sqlite), и после компиляции e_sqlite3.dll не включается.
Вместо этого в выходной папке он создает два файла (за исключением файла pdb):

> e_sqlite3.dll
> WpfApp1.exe

1 ответ

Решение

Читая документацию

Однофайловые библиотеки по умолчанию не объединяют. В Linux мы предварительно связываем среду выполнения с пакетом, и только собственные библиотеки приложения развертываются в том же каталоге, что и однофайловое приложение. В Windows мы предварительно связываем только код хостинга, а собственные библиотеки среды выполнения и приложения развертываются в том же каталоге, что и однофайловое приложение. Это необходимо для обеспечения хорошего опыта отладки, который требует исключения собственных файлов из одного файла. Есть возможность установить флаг, IncludeNativeLibrariesForSelfExtract, чтобы включить собственные библиотеки в пакет с одним файлом, но эти файлы будут извлечены во временный каталог на клиентском компьютере при запуске приложения с одним файлом.

Итак (в моем случае e_sqlite3.dll) собственные библиотеки не включены по умолчанию, чтобы обеспечить удобство отладки.
Если вы все равно хотите включить их в исполняемый файл приложения, вы можете просто добавить эту строку в файл проекта (.csproj).

       <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>

Пример:

       <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
    <StartupObject>WpfApp1.App</StartupObject>
    <Description>WpfApp1</Description>
  </PropertyGroup>

...

</Project>
Другие вопросы по тегам