【问题标题】:NuGet package across mutliple projects跨多个项目的 NuGet 包
【发布时间】:2019-07-09 19:01:34
【问题描述】:

我有一个项目用于创建 SqlLite3 数据库的处理。该项目被多个其他项目使用,而这些项目又被 UI 项目使用。我只将 Nuget 包添加到处理 Sqlite3 接口的项目中。

当我尝试运行 UI 时,它会调用以从数据库中获取信息,当这种情况发生时,我会收到 SQLite.Interop.dll 的 System.DllNotFoundException。

那么我如何强制它工作而不必将 Nuget 包添加到解决方案中的所有项目?

【问题讨论】:

  • 创建一个处理所有数据库查询的项目并将所需的类添加到其中以供其他项目使用。
  • 我认为这是重复的,看看你要的答案是否在那个链接中。
  • 我不明白这有什么帮助。这是在谈论创建一个新包。我正在做的是引用 a.dll 中的打包,当我运行引用 a.dll 的 b.dll 时,它给了我找不到 dll 的问题
  • 我也看不出它是如何与那个问题重复的。 @kw1jybo 告诉我们更多关于使用这个包的项目。是否是 SDK 风格的项目?是 WinForms、WPF 还是其他东西?如果不是 SDK 风格,您使用的是 PackageReference 还是 packages.config?目标框架是什么?

标签: c# visual-studio nuget


【解决方案1】:

也许您的问题类似于在 WPF 项目中使用 Sqlite 时经常出现的this one

SQLite 似乎使用入口程序集来检测要加载哪个版本的 Interop。

对于您的情况,您可以尝试解决问题的简单方法(先备份):

  1. 右键单击您的UI project=>Properties=>Build=>disable the Prefer 32-bit 或更改platform target from Any CPU to X64 or X86

  1. 我认为您不必将 nuget 添加到解决方案中的所有项目中,将其添加到 UI 项目(在您的解决方案中设置为 StartUp 项目的主项目)就足够了。

  2. 另外,你可以试试Wil's answer,你需要做的是:在你的UI项目目录(xx.csproj所在的地方)创建x64 and x86文件夹=>找到并复制SQLite.Interop.dll for x64 和 x86 到相应的文件夹。然后在VS中,右键UI项目=>unload UI projectedit xx.csproj=>将工作版本脚本复制到xx.csproj文件中,然后重新加载UI项目。(复制ItemGroup脚本within <Project> tag

记得在运行应用程序之前重建项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多