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

时间:2020-11-10 23:26:12

标签: wpf sqlite .net-5 single-file microsoft.data.sqlite

使用.NET 5发布单个文件可执行文件时,我有一个小问题。
实际上,它不会在可执行文件中包含所有库,并且会生成多个文件。

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

> e_sqlite3.dll
> WpfApp1.exe

1 个答案:

答案 0 :(得分:5)

通过阅读documentation

默认情况下,单个文件不捆绑本机库。在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>