.NET 5 从单个文件发布中排除了一些库

Fir*_*XYZ 3 sqlite wpf single-file .net-5 microsoft.data.sqlite

我在使用 .NET 5 发布单个文件可执行文件时遇到了一个小问题。
事实上,它不包括可执行文件中的所有库,并生成多个文件。

在我的示例中,我使用的是 SQLite (Microsoft.Data.Sqlite) 库,并且在编译后,不包括e_sqlite3.dll
相反,在输出文件夹中,它会生成两个文件(不包括 pdb 文件):

> e_sqlite3.dll
> WpfApp1.exe
Run Code Online (Sandbox Code Playgroud)

Fir*_*XYZ 9

通过阅读文档

默认情况下,单文件不捆绑本机库。在 Linux 上,我们将运行时预链接到包中,并且仅将应用程序本机库部署到与单文件应用程序相同的目录中。在 Windows 上,我们仅预链接托管代码,运行时和应用程序本机库都部署到与单文件应用程序相同的目录中。这是为了确保良好的调试体验,这需要从单个文件中排除本机文件。有一个选项可以设置标志 ,IncludeNativeLibrariesForSelfExtract以在单个文件包中包含本机库,但是当运行单个文件应用程序时,这些文件将被提取到客户端计算机中的临时目录中。

因此(就我而言,e_sqlite3.dll)默认情况下不包含本机库以确保良好的调试体验
如果您想在应用程序可执行文件中包含它们,只需将此行添加到项目 (.csproj) 文件中即可。

<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
Run Code Online (Sandbox Code Playgroud)

例子:

<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>
Run Code Online (Sandbox Code Playgroud)