我正在使用ASP.NET Core 2和Entity Framework Core 2.0.2。我在Package Manager Controller中创建了一个上下文和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>
几天前我遇到了同样的问题 - 我不确定底层问题是什么,但是将一些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" />
同样的问题在这里,但对我来说,System.Data.SqlClient无法作为插件的一部分动态加载。我们的插件dll通过Autofac动态加载,控制服务在运行时选择正确的插件。不幸的是,System.Data.SqlClient不会像这样动态加载,导致出现上述错误消息。所以我必须在控制服务启动时加载它。这显然不是理想的,但是现在它是一个可用的解决方法,因为我们所有的插件仍在我们的控制之下。
在评论中提出问题后,我会更具体。
服务在运行时选择插件。插件通过Autofac注册自己的依赖项,如果该依赖项是Nuget包,它们也将包作为普通的Nuget依赖项。
控制服务在启动时注册插件dll,并且在第一次使用它们时,也会加载插件依赖项。在调用插件后尝试加载System.Data.SqlClient时,会出现“不支持”错误。
将System.Data.SqlClient设置为控制服务中的Nuget依赖项,并正确加载库而不会出现错误。这并不理想,因为即使不使用使用它的插件,SqlClient库也必须始终由控制服务加载。
我最近遇到了这个问题,常规.net框架应用程序正在使用.net标准2.0类。 (.net 4.7.x)。唯一最终解决我的问题的是在常规.net应用程序上从packages.config迁移到PackageReference。