此平台不支持System.Data.SqlClient

Sas*_*esh 8 c# sql-server database-migration entity-framework-core asp.net-core

我正在使用ASP.NET Core 2和Entity Framework Core 2.0.2.我Add-Migrations在Package Manager Controller中创建了一个上下文和命令工作正常.

但是,当使用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>
Run Code Online (Sandbox Code Playgroud)

rob*_*obs 9

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

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

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

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

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

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


Car*_*ick 6

几天前我遇到了同样的问题 - 我不确定底层问题是什么,但是将一些EntityFrameworkCorenuget包恢复到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" />
Run Code Online (Sandbox Code Playgroud)

  • @robs,你找到解决方案了吗?我没有在我的项目中使用 EF。谢谢。 (2认同)

Bla*_*son 5

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