首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除单文件编译过程中的"e_sqlite3.dll“

删除单文件编译过程中的"e_sqlite3.dll“
EN

Stack Overflow用户
提问于 2022-12-02 21:01:10
回答 2查看 30关注 0票数 0

在尝试编译利用Microsoft.Data.Sqlite的单个文件二进制文件时,我始终会看到的两个文件,这两个文件都是应用程序工作所必需的。

  1. {ProjectName}.exe
  2. e_sqlite3.dll

是否可以将e_sqlite3.dll包含到exe中?

看来,System.Data.Sqlite表现出了同样的行为,而是一个名为SQLite.Interop.dll的文件。

样本代码

注意:我意识到与SQLite没有实际的互操作,这段代码纯粹是为了演示编译。

ProjectName.fsproj

代码语言:javascript
运行
复制
<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>

Program.fs

代码语言:javascript
运行
复制
module ProjectName.Program

open System

[<EntryPoint>]
let main (argv : string[]) =
    printfn "Hello world"
    0

该项目汇编如下:

代码语言:javascript
运行
复制
dotnet publish .\ProjectName.fsproj -c Release
EN

回答 2

Stack Overflow用户

发布于 2022-12-03 01:56:35

解决方案

事实证明,在net6、net7以及(想必)之外,通过将IncludeNativeLibrariesForSelfExtract设置为true,很容易做到这一点。

代码语言:javascript
运行
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2022-12-02 23:04:51

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74661400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档