在单个文件编译期间消除“e_sqlite3.dll”

rmbxnbpk  于 2022-12-04  发布在  SQLite
关注(0)|答案(2)|浏览(258)

在我尝试编译一个利用Microsoft.Data.Sqlite的单文件二进制文件时,我总是留下***两个文件***,这两个文件都是应用程序工作所必需的。

  1. {ProjectName}.exe
  2. 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
3zwjbxry

3zwjbxry1#

溶液

事实证明,在net6、net7和(大概)更高版本中,通过将IncludeNativeLibrariesForSelfExtract设置为true,可以相当容易地实现这一点。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <SelfContained>true</SelfContained>
    <PublishSingleFile>true</PublishSingleFile>
    <PublishReadyToRun>true</PublishReadyToRun>
    <PublishTrimmed>true</PublishTrimmed>

    <!-- Must include this line -->
    <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
    <DebuggerSupport>false</DebuggerSupport>
    <EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
    <HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
    <InvariantGlobalization>true</InvariantGlobalization>
    <UseNativeHttpHandler>true</UseNativeHttpHandler>
    <UseSystemResourceKeys>true</UseSystemResourceKeys>
    <EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Data.Sqlite" version="7.*" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Program.fs" />
  </ItemGroup>
</Project>
avkwfej4

avkwfej42#

遗憾的是,似乎不可能将e_sqlite3.dll包含到exe文件中。拥有单文件可执行文件的唯一方法是使用.NET本机工具链,可以通过将属性设置为true来启用该工具链。

相关问题