.NET 7 Microsoft.Data.SqlClient PlatformNotSupportedException DbContext 使用时出现错误

问题描述 投票:0回答:1

我已使用升级助手将我的类库项目从 .NET Framework 4.8 迁移到 .NET 7。我的 SQL Server 数据库位于云中。我正在使用 Windows 10 操作系统和 Visual Studio 2022。

当我尝试使用 DbContext 时,出现此错误:

System.PlatformNotSupportedException:“此平台不支持 Microsoft.Data.SqlClient。”

下面列出了PackageReferences(使用NuGet将它们添加到项目中):

<ItemGroup> <PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.5" /> <PackageReference Include="Microsoft.Data.SqlClient.SNI.runtime" Version="5.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.15"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.15" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.15"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" /> <PackageReference Include="Microsoft.SqlServer.Server" Version="1.0.0" /> <PackageReference Include="PreEmptive.Protection.Checks.Attributes" Version="2.0.0" /> <PackageReference Include="System.Data.Common" Version="4.3.0" /> <PackageReference Include="System.Data.SqlClient" Version="4.8.6" /> <PackageReference Include="System.Interactive.Async" Version="6.0.1" /> <PackageReference Include="System.Memory" Version="4.5.5" /> <PackageReference Include="System.Reflection.Emit" Version="4.7.0" /> <PackageReference Include="System.Reflection.TypeExtensions" Version="4.7.0" /> <PackageReference Include="System.Runtime.Handles" Version="4.3.0" /> <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" /> <PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Options" Version="8.0.1" /> <PackageReference Include="Microsoft.Extensions.Primitives" Version="8.0.0" /> <PackageReference Include="Microsoft.NETCore.Platforms" Version="7.0.4" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="System.Collections.Immutable" Version="8.0.0" /> <PackageReference Include="System.ComponentModel.Composition" Version="8.0.0" /> <PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0" /> <PackageReference Include="System.Data.OleDb" Version="8.0.0" /> <PackageReference Include="System.Diagnostics.DiagnosticSource" Version="8.0.0" /> <PackageReference Include="System.Management" Version="8.0.0" /> <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" /> <PackageReference Include="System.Security.Cryptography.Cng" Version="5.0.0" /> <PackageReference Include="System.Security.Cryptography.Pkcs" Version="8.0.0" /> <PackageReference Include="System.Security.Cryptography.Xml" Version="7.0.1" /> </ItemGroup>
DbContext 代码如下所示:

public partial class dbContext : DbContext { public dbContext() : base(new DbContextOptionsBuilder<dbContext>().UseSqlServer("Data Source=SERVER_IP;Initial Catalog=MY_DB_NAME;User Id=USER_NAME;Password=MY_PW;").Options) { } }
我尝试过降级依赖项,但没有成功。

我还尝试在

.csproj

 文件中指定运行时,如下所示,但这也不起作用:

<RuntimeIdentifier>win-x64</RuntimeIdentifier> <RuntimeIdentifier>win</RuntimeIdentifier> <ItemGroup> <None Include="$(USERPROFILE)\.nuget\packages\microsoft.data.sqlclient\5.1.5\runtimes\win\lib\net6.0\Microsoft.Data.SqlClient.dll"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup> <Target Name="CopyToBin" BeforeTargets="Build"> <Copy SourceFiles="$(USERPROFILE)\.nuget\packages\microsoft.data.sqlclient\5.1.5\runtimes\win\lib\net6.0\Microsoft.Data.SqlClient.dll" DestinationFolder="$(OutputPath)\bin" /> </Target>
我还清除了 nuget 缓存,但没有帮助。我想我遇到了软件包版本的问题,但不确定要使用哪个版本。似乎都是最新版本。

c# sql-server entity-framework-core .net-7.0 sqlclient
1个回答
0
投票

蛮力方法(有效)

我发现有时将 Microsoft.Data.SqlClient 和 System.Data.SqlClient 添加到所有涉及的项目中(即使看起来他们不需要它们)可以解决问题。然后,一旦所有内容都编译完毕,您就可以进去并尝试一次删除它们并重新编译,直到只剩下您需要的那些。

© www.soinside.com 2019 - 2024. All rights reserved.