无法加载文件或程序集'System.Data.SqlClient,版本= 4.4.0.0

Kri*_*lle 3 c#

首先,一些上下文信息:

运行该平台的平台已安装.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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

和app.config:

<dependentAssembly>
  <assemblyIdentity name="System.Data.SqlClient"  publicKeyToken="kfddsnfsjnfs"  culture="neutral" />
  <bindingRedirect oldVersion="4.4.0.0" newVersion="4.5.1.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

但是,这并没有什么不同。我还尝试了旧版本的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>
Run Code Online (Sandbox Code Playgroud)

use*_*663 10

从 切换System.Data.SqlClientMicrosoft.Data.SqlClient

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

  • 我们有一个 .Net Framework 4.6.1 程序集并将其包含在 .Net Core 3.1 api 中,因此我们需要在库和主 api 项目中都包含“Microsoft.Data.SqlClient”。将代码从 Systems.Data.SqlClient 更改为 Microsoft.Data.SqlClient 还需要在启动构造函数中添加此行: `public Startup(IConfiguration configuration) { Configuration = configuration; // 切萨雷。Requerido para .net Core DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", Microsoft.Data.SqlClient.SqlClientFactory.Instance); }` (3认同)
  • 您使用什么版本的 .net core?奇怪的是,它在 3.0 中对我来说工作得很好,但当我更新到 3.1 时,我开始收到此错误。 (2认同)

Gab*_*uci 5

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

旧答案:该版本存在于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
Run Code Online (Sandbox Code Playgroud)

更新:或者,在绑定重定向中,仅用4.2.0.0oldVersion


小智 5

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

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

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

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


小智 5

在两个项目中安装版本 4.8.2

安装包 System.Data.SqlClient -Version 4.8.2