【问题标题】:System.Data.SqlClient is not supported on this platform此平台不支持 System.Data.SqlClient
【发布时间】:2018-08-27 13:46:51
【问题描述】:

我正在使用 ASP.NET Core 2 和 Entity Framework Core 2.0.2。我在包管理器控制器中创建了一个上下文和Add-Migrations 命令工作正常。

但是当使用Update-Database 命令时,我得到一个错误:

此平台不支持System.Data.SqlClient

我不知道问题出在哪里。你能帮助我吗?谢谢。

我的.csproj 文件:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <DebugType>portable</DebugType>
    <PreserveCompilationContext>true</PreserveCompilationContext>
    <DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
  </PropertyGroup>

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

  <ItemGroup>
    <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.2.1" />
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.2" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="2.3.0" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.2" />
  </ItemGroup>

</Project>

【问题讨论】:

标签: c# sql-server asp.net-core entity-framework-core database-migration


【解决方案1】:

几天前我遇到了同样的问题 - 我不确定根本问题是什么,但是将一些 EntityFrameworkCore nuget 包恢复到 2.0.0 似乎已经解决了我的问题。这些是我降级的包:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" />

【讨论】:

  • 是的,这也解决了我的问题。在玩弄不同版本的 Microsoft.EntityFrameworkCore 时,我能够解决我的问题。很抱歉,我已经用我的项目购买了几天的回复晚了。
  • @robs,你找到解决方案了吗?我没有在我的项目中使用 EF。谢谢。
  • 在我的例子中,将 NuGet 中的 System.Data.SqlClient 从 4.8.1 降级到 4.1.0 修复了它。这可能适用于 4.8 和 4.1 之间的其他版本,但我没有时间测试。
  • 2021 年 8 月,这仍然是解决方案。哇。我最终得到了一个 .NET Core 2.0 控制台应用程序和一个使用 EF Tools 和 EF SqlServer 的模型项目 (.NET Standard 2.0)。我不得不将两个 EF 包都降级到 2.0.0
【解决方案2】:

我最近遇到了这个问题,因为 .net 标准 2.0 类被常规 .net 框架应用程序使用。 (.net 4.7.x)。最终解决我的问题的唯一方法是在常规 .net 应用程序上从 packages.config 迁移到 PackageReference。

【讨论】:

  • ByPackageReference 已管理所有依赖项。因此,您不需要检查各个依赖项。通过使用 PackageReference,可能已经管理了依赖项。
  • 另外,我几乎一年都没有使用 .net 开发任何东西。以上评论是我对解决方案的看法。
  • 我在 Google 上搜索了有关迁移到 PackageReference 的信息,发现该链接对我很有用。 devblogs.microsoft.com/nuget/…
【解决方案3】:

这里有同样的问题,但对我来说,System.Data.SqlClient 作为插件的一部分动态加载是失败的。我们的插件 dll 通过 Autofac 动态加载,控制服务在运行时选择正确的。不幸的是 System.Data.SqlClient 不会像这样动态加载,导致上述错误消息。所以我必须在控制服务启动时加载它。这显然不理想,但目前它是一个可用的解决方法,因为我们所有的插件仍在我们的控制之下。

我会更具体,在 cmets 中提出问题。

服务在运行时选择插件。插件通过 Autofac 注册自己的依赖项,如果该依赖项是 Nuget 包,它们还将将该包作为正常的 Nuget 依赖项包含在内。

控制服务在启动时注册插件 dll,并且在第一次使用它们时也会加载插件依赖项。在调用使用 SqlClient 的插件后尝试加载 System.Data.SqlClient 时,会出现“不支持”错误。

在控制服务中将 System.Data.SqlClient 设置为 Nuget 依赖项可以正常工作,并且库已正确加载且没有错误。但是,这并不理想,因为 SqlClient 库始终必须由控制服务加载,即使选择运行它的插件不需要它。

换句话说,SqlClient 库总是在服务启动时加载,占用资源等,甚至可能不需要它。但至少它有效。

【讨论】:

  • “所以我必须加载它” - 你是什么意思?
  • 如果在 .NET Core 3.1 中使用 Microsoft.Data 代替 System.Data 那么为什么 IDbConnection 仍然显示错误?在这种情况下,谁使用 .NET 核心来实现存储库模式?
  • @robs 同样的问题,但尝试提出的解决方案对我不起作用。我有一个类似的解决方案,有很多项目(.NET Core 2.1 和 .NET Standard)。具有实体和迁移的 My Domain Objects 项目是 .NET Core 2.1,但它不是主(启动)项目。所以我还必须使用IDesignTimeDbContextFactory 实现“技巧”来启用迁移。我的 Main(启动项目)使用 UnityContainer 进行依赖注入和 DLL 动态加载。
【解决方案4】:

将框架更改为 .NetCore 3.x 或 .NetFramework 4.x...

【讨论】:

    【解决方案5】:

    以防万一有人在这里尝试在 net50/netstandard 上运行 System.Data.SqlClient on rid freebsd-x64:Microsoft.Data.SqlClient 为我工作。

    也许这适用于每个便携式选项和/或所有 System.[...] ->Microsoft.[...] dll。

    【讨论】:

      【解决方案6】:

      我花了几个小时解决这个问题。在这里发帖以防其他人节省一些时间。

      在我的 .csproj 文件中

      <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
      

      删除它解决了我的问题。一些信息可以找到here。将该值设置为 true 会导致所有依赖项都被复制到输出文件夹,对我来说,也许在加载应用程序时,它对加载哪个 System.Data.SqlClient.dll 感到困惑。

      【讨论】:

        【解决方案7】:

        我正在部署的 .NET 5.0 控制台应用程序遇到了同样的问题。我发现当我发布应用程序时,发布配置文件目标框架设置为 3.1 而不是 5.0,这就是导致我出现此错误的原因。使用正确的目标框架重新发布后,一切都按预期工作。

        【讨论】:

          猜你喜欢
          • 2019-12-29
          • 2021-01-05
          • 2019-05-25
          • 1970-01-01
          • 2019-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多