【问题标题】:Could not load file or assembly 'System.Data.SQLite, Version=1.0.109.0 - Why does it search for version 1.0.109.0 when I have referenced 1.0.109.1无法加载文件或程序集'System.Data.SQLite,版本 = 1.0.109.0 - 为什么当我引用 1.0.109.1 时它会搜索版本 1.0.109.0
【发布时间】:2018-08-30 07:48:51
【问题描述】:

我创建了新的ASP.NET Core Web Application 并使用了ASP.NET Core 2.1 跨平台框架。

接下来,我使用Nuget manager 添加了System.Data.SQLite.Core。它是 x86 和 x64 的官方 SQLite 数据库引擎以及 ADO.NET 提供程序。

我的主要方法

    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
        SQLiteConnection con = new SQLiteConnection("abc");
    }

当我运行应用程序时,它会尝试搜索 1.0.109.0 而不是安装的 1.0.109.1 版本。

所以最终按预期抛出异常

System.IO.FileNotFoundException H结果=0x80070002 消息=无法加载文件或程序集“System.Data.SQLite,版本=1.0.109.0,文化=中性,PublicKeyToken=db937bc2d44ff139”。该系统找不到指定的文件。 来源=

那么,为什么它在搜索错误的版本?

截图供参考

我的解决方案平台是“任何 CPU”,我在 x64 上运行 Windows 7 在 x64 上

奇怪

当我在 SQLiteConnection 类上执行 F12 时,它会转到

我的 .csproj 文件内容

 <Project Sdk="Microsoft.NET.Sdk.Web">

 <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
     <PlatformTarget>AnyCPU</PlatformTarget>
  </PropertyGroup>

   <ItemGroup>
      <PackageReference Include="Microsoft.AspNetCore.App" />
      <PackageReference Include="System.Data.SQLite.Core" Version="1.0.109.1" />
    </ItemGroup>

【问题讨论】:

    标签: .net sqlite asp.net-core


    【解决方案1】:

    我遇到了同样的问题。最终为我工作的是:

    1. 在 Windows 资源管理器中,导航到 %UserProfile%\.nuget\packages
    2. 删除system.data.sqlite.coresystem.data.sqlite.core 的目录
    3. 在您的 .csproj 中,将您的 sqlite 包引用更改为

      `<PackageReference Include="System.Data.SQLite.Core" Version="1.0.109.0"/>`
      
    4. 重建项目以恢复包

    【讨论】:

    • 哇,成功了!但这是正确的做法吗?我们会从 1.0.109.1 中获得所有好处吗?还是它仍然指向 1.0.109.0 。无论如何,让我将其标记为答案,因为我认为没有其他办法。
    • 是的,这是一种解决方法。在我看来,正确的方法可能是 sqlite 人员的解决方法,但我不确定。在尝试此操作之前,我在 %UserProfile% 目录中进行了挖掘,并注意到使用 109.1 安装的 lib 中的 dll 实际上是 109.0 版本。只要正确配置了 nuspec,我认为这并不重要,但我创建 nuspecs 的经验正好是 1。
    【解决方案2】:

    我认为 1.0.109.0 已经过时,在nuget 上不再可用你可以去

    .csproj

    ItemGroup

    检查system.Data.SQlite.Core 的版本号。 如果它正在使用 1.0.109.0 则将其替换为 1.0.109.1

    我有一个项目,您可以在其中看到 .csproj 和引用中的版本相同

    如果您没有使用visual studio code,您可以通过右键单击项目并选择在文件资源管理器中打开文件夹来找到 .csproj 文件

    因为你有 System.Data.SQLite.Core1.0.109.1 版本而不是 System.Data.SQLite

    Install-Package System.Data.SQLite -Version 1.0.109.1
    

    【讨论】:

    • csproj 的版本为“1.0.109.1”
    • 我已经有了-Version 1.0.109.1,为什么还要再运行命令?
    • 你的版本是 System.Data.SQLite.Core 而不是 System.Data.SQLite
    • 我都添加了,但仍然有同样的错误。 :(你有机会繁殖吗?
    【解决方案3】:

    我在 Asp.Net Core 2.0 上遇到了同样的问题,唯一有帮助的是使用 1.0.108。

    【讨论】:

    • 看起来该版本在 nuget 上不再可用。你能详细说明你是如何安装它的吗?
    • 在哪里可以找到 1.0.108?
    • 抱歉回复晚了 - 手动编辑 .csproj 文件有效 - 但通过 NuGet VS.Code 插件也是如此,它确实为我提供了 1.0.108。
    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2020-05-09
    • 2018-10-04
    • 2020-11-11
    • 2013-11-14
    相关资源
    最近更新 更多