首页 > 解决方案 > 使用 sqlite 创建 .Net Core 全局工具无法加载 SQLite.Interop

问题描述

我正在编写一个访问 SQLite 数据库的 .Net Core 全局工具。我正在使用SQLProvider来满足我的 ORM 需求System.Data.SQLite.Core。在 SQLProvider 文档中,它说明了必须将 SQLite.Interop.dll 复制到输出路径的一些内容,我相信我已经正确地做到了这一点,因为程序按照它应该从 Visual Studio 执行,以及使用 Fake 构建项目处于发布模式并直接使用 dotnet 运行生成的 .dll。

但是,当我尝试将其打包为 NuGet 文件时,当我尝试运行该程序时它会失败,System.Reflection.TargetInvocationException: Unable to load DLL 'SQLite.Interop.dll' or one of its dependencies并且我无法确定 SQLite.Interop.dll 的复制是否正确,或者还有其他一些问题。仅当我尝试运行已安装的全局工具时才会出现此错误,如果我通过 dotnet 运行发布模式二进制文件则不会出现此错误

从评论编辑:

SQLite.Interop.dll 不包含在 NuGet 包中。我正在通过调用DotNet.pack. 我将如何告诉该步骤包含 dll?

打包步骤目前看起来像这样

Target.create "Pack" (fun _ ->
DotNet.pack (fun packOptions ->
    { packOptions with 
        Configuration = DotNet.BuildConfiguration.Release
        NoBuild = true
        VersionSuffix = Some "1.0.1-preview8"
        OutputPath = Some outputDirectory }
) "./src/WhereInTheWorld/WhereInTheWorld.fsproj"

任何帮助,将不胜感激。

标签: sqlitef#.net-corenuget

解决方案


我在评论我的 rmunn 后想通了。它与将互操作 dll 放入最终的 nuget 文件有关。我将此添加到我的 .fsproj 文件中

<Content Include="../../packages/System.Data.SQLite.Core/build/net46/**/*">
    <Pack>true</Pack>
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>

推荐阅读