此平台不支持 System.Data.SqlClient
Posted
技术标签:
【中文标题】此平台不支持 System.Data.SqlClient【英文标题】:System.Data.SqlClient is not supported on this platform 【发布时间】: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>
【问题讨论】:
您能发布.csproj
文件的内容吗?
csproj我项目的.csproj文件
请不要链接 - 编辑您的问题并在其中发布代码。没有代码,这个问题就离题了,很可能会被关闭。见How to Ask。理想情况下,there would be enough code in your question to duplicate the problem.
抱歉,谢谢。
从github看这个问题github.com/dotnet/corefx/issues/24229
【参考方案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,这就是导致我出现此错误的原因。使用正确的目标框架重新发布后,一切都按预期工作。
【讨论】:
以上是关于此平台不支持 System.Data.SqlClient的主要内容,如果未能解决你的问题,请参考以下文章