.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>