【问题标题】:.NET 5 excludes some libraries from single file publication.NET 5 从单个文件发布中排除了一些库
【发布时间】:2021-02-22 22:40:51
【问题描述】:
我在使用 .NET 5 发布单文件可执行文件时遇到了一点问题。
实际上,它并不包含可执行文件中的所有库,而是生成多个文件。
在我的示例中,我使用 SQLite 库 (Microsoft.Data.Sqlite),编译后,e_sqlite3.dll 不包括在内。
相反,在输出文件夹中,它会生成两个文件(不包括 pdb 文件):
> e_sqlite3.dll
> WpfApp1.exe
【问题讨论】:
标签:
wpf
sqlite
.net-5
single-file
microsoft.data.sqlite
【解决方案1】:
通过阅读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>