在我尝试编译一个利用Microsoft.Data.Sqlite的单文件二进制文件时,我总是留下***两个文件***,这两个文件都是应用程序工作所必需的。
{ProjectName}.exe
e_sqlite3.dll
是否可以将e_sqlite3.dll
包含到exe中?
看起来System.Data.Sqlite表现出了相同的行为,但取而代之的是一个名为SQLite.Interop.dll
的文件。
示例代码
注意:我意识到SQLite没有实际的互操作,这段代码纯粹是为了演示编译。
项目名称.fsproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Data.Sqlite" version="7.*" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
</Project>
程序.fs
module ProjectName.Program
open System
[<EntryPoint>]
let main (argv : string[]) =
printfn "Hello world"
0
编制项目如下:
dotnet publish .\ProjectName.fsproj -c Release
2条答案
按热度按时间3zwjbxry1#
溶液
事实证明,在net6、net7和(大概)更高版本中,通过将
IncludeNativeLibrariesForSelfExtract
设置为true
,可以相当容易地实现这一点。avkwfej42#
遗憾的是,似乎不可能将e_sqlite3.dll包含到exe文件中。拥有单文件可执行文件的唯一方法是使用.NET本机工具链,可以通过将属性设置为true来启用该工具链。