【问题标题】:Could not load file or assembly 'System.Data.SqlClient, Version=4.4.0.0无法加载文件或程序集 'System.Data.SqlClient,版本 = 4.4.0.0
【发布时间】:2021-09-16 19:40:58
【问题描述】:

首先,一些上下文信息:

运行此平台的平台已安装 .Net Framework 4.7.1。我有一个符合 .Net Standard 2 规范的类库,以便将来支持 .Net Core。现在部分依赖项,即 Dapper,使用 System.Data.SqlClient。这个库在我自己的机器上工作得很好,但是当我在我的 Windows 2012 服务器上部署和测试它时遇到了问题。即,我在使用 Dapper 时出现运行时错误:Could not load file or assembly 'System.Data.SqlClient, Version=4.4.0.0, Culture=neutral, PublicKeyToken=kfddsnfsjnfs' or one of its dependencies. The system cannot find the file specified.

请注意,我首先安装了 4.5.1.0 版。然后我降级到 4.4.0.0 并重新运行代码。现在我遇到了同样的错误,但这次是关于 4.2.0.0。但我似乎在 Nuget 上找不到这个特定版本。在此之后,我用谷歌搜索。很多。首先,我尝试通过添加

appsettings.json:

{
  "dependentAssembly": {
    "assemblyIdentity": {
      "name": "System.Data.SqlClient",
      "publicKeyToken": "kfddsnfsjnfs",
      "culture": "neutral"
    },
    "bindingRedirect": {
      "oldVersion ": "4.4.0.0",
      "newVersion": "4.5.1"
    }
  }
}

和 app.config:

<dependentAssembly>
  <assemblyIdentity name="System.Data.SqlClient"  publicKeyToken="kfddsnfsjnfs"  culture="neutral" />
  <bindingRedirect oldVersion="4.4.0.0" newVersion="4.5.1.0" />
</dependentAssembly>

然而这并没有什么不同。我还尝试过旧版本的 SqlClient 和多次重新安装。我还发现有人说要仔细检查 csproj 文件,所以它没有引用 gac 中的某些内容,但它没有:

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

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <Authors>me</Authors>
    <Product />
    <Company />
    <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
    <Version>1.0.8</Version>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="TaskMetadata.json">
      <PackagePath>TaskMetadata.json</PackagePath>
      <Pack>True</Pack>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="dapper" Version="1.50.5" />
    <PackageReference Include="itextsharp" Version="5.5.13" />
    <PackageReference Include="System.Data.SqlClient" Version="4.5.1" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="External\" />
  </ItemGroup>

</Project>

【问题讨论】:

  • 假设这是一个 Visual Studio 项目,您是否检查了 References 节点中的引用?
  • 是的,我实际上在 Dependencies>Nuget>Dapper>System.Data.SQLClient 和 Dependencies>Nuget>System.Data.SQLClient 上有两个对 SqlClient 的引用。它们都是 4.5.1
  • 在该程序的可执行文件所在的文件夹中,您是否在您的机器和 Windows 2012 服务器上都看到了 System.Data.SQLClient.dll 文件?
  • 不,我能找到的最接近的 DLL 名为 System.Data.SQLite
  • 转到 References 节点,然后转到 Add Reference...,然后向下滚动直到找到 System.Data.SQLClient。单击它旁边的复选框,然后关闭参考窗口。构建项目后,您现在应该在上述文件夹中拥有正确的 DLL。

标签: c#


【解决方案1】:

每个库都在主应用程序的进程下运行。所以主应用程序需要知道加载SqlClient DLL。因此,父项目(.NET 4.7.1 项目)需要添加 SqlClient 作为引用,或者通过安装 NuGet 包,或者通过浏览到 .NET Standard 项目下的 DLL 来添加引用。

旧答案: NuGet 中存在该版本:https://www.nuget.org/packages/System.Data.SqlClient/4.4.0

在包管理器控制台中(确保“默认项目”下拉菜单设置为正确的),尝试卸载然后重新安装该特定版本:

Uninstall-Package System.Data.SqlClient
Install-Package System.Data.SqlClient -Version 4.4.0

更新: 或者,在您的绑定重定向中,只需使用 4.2.0.0 作为 oldVersion

【讨论】:

  • 重要的是,如果您更新标准项目中的版本,您还需要更新框架项目中的版本,否则您可能会分发错误的文件。
【解决方案2】:

在两个项目中安装 4.8.2 版

安装包 System.Data.SqlClient -Version 4.8.2

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,基本上我正在开发一个获胜表单应用程序。使用 .net 框架,我的类库是 .net 标准的。

    我尝试安装和卸载System.Data.SqlClient ten times,但没有成功

    后来我想到了一些事情,因为我在 UI 层中安装了相同的引用,然后它就起作用了。尽管如此,我没有任何代码在 UI 层上与 Sql 对话,然后引发了另一个问题,因为 UI 也无法识别对 Dapper 的引用,我也必须在 UI 上安装 Dapper 引用。然后一切都很好。

    我真的很惊讶这怎么不起作用。将 UI 引用到类库后,类库应该执行所需的操作并将数据传递给 UI!

    【讨论】:

    • 当我将解决方案移动到 .net core 6.0 上的新文件夹时,出现同样的问题。 UI层的项目没有安装System.Data.Sql.Client,也不需要,但是在找4.6版本。当它在数据库层调用 DLL 时。通过nuget在UI项目上安装当前4.8版本的System.Data.Sql.Client,即使它从未使用过,也解决了问题。
    【解决方案4】:

    System.Data.SqlClient 切换到Microsoft.Data.SqlClient

    https://devblogs.microsoft.com/dotnet/introducing-the-new-microsoftdatasqlclient/

    【讨论】:

    • 您使用的是哪个版本的 .net core?奇怪的是,它在 3.0 中对我来说很完美,但是一旦我更新到 3.1,我就开始收到这个错误。
    • 我不记得了,但我们的团队还没有使用 core 3.x
    • .net core 3.1 版也有这个问题。有人有解决办法吗?
    • 你说Microsoft.Data.SqlClient,也许?
    • 我们有一个 .Net Framework 4.6.1 程序集并将其包含在 .Net Core 3.1 api 中,因此我们需要在库和主 api 中都包含“Microsoft.Data.SqlClient”项目。将代码从 Systems.Data.SqlClient 更改为 Microsoft.Data.SqlClient 还需要在 Startup 构造函数中添加此行:public Startup(IConfiguration configuration) { Configuration = configuration; // Chesare. Requerido para .net Core DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", Microsoft.Data.SqlClient.SqlClientFactory.Instance); }
    【解决方案5】:

    尝试通过 NuGet 再次添加 System.Data.SqlClient,尽管您可能已经将它作为 .NET Framework 的一部分使用。这个解决方案解决了我的问题。

    【讨论】:

      【解决方案6】:

      我在运行单元测试用例时遇到了这个问题。 {"Could not load file or assembly 'System.Data.SqlClient, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.":"System.Data.SqlClient, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"} System.IO.FileNotFoundException

      当我安装 System.Data.SqlClient, Version=4.4.0.0 然后它不起作用。

      但是当我安装最新版本的 System.Data.SqlClient nuget 包时,这个问题得到了解决。

      【讨论】:

        【解决方案7】:

        我在使用 .NET Core 时遇到了这个错误(使用最新的 Microsoft.Data.SqlClient),我不得不从

        更改我的 DBProvider
        Microsoft.Data.SqlClient
        

        Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient
        

        为了让 NLog 加载 Microsoft.Data.SqlClient

        【讨论】:

          【解决方案8】:

          我在 Azure 中的一个 Web 作业的控制台上收到此错误。在发布配置文件中,我将配置从“调试”更改为“发布”,然后它就起作用了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-15
            • 2020-05-09
            • 2018-10-04
            • 2020-11-11
            相关资源
            最近更新 更多