c# - 作为 dotnet cli 工具启动时获取“此平台不支持 System.Data.SqlClient”
问题描述
DbContext
我们有一个使用from的简单 netcore 2.2 控制台应用程序Microsoft.EntityFrameworkCore
。从控制台按原样启动时,它按预期工作。
但是,我们决定将其用作dotnet CLI 工具。它的 .csproj 文件包含:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AssemblyName>dotnet-dbupdate</AssemblyName>
<Title>Db Updater</Title>
<Version>1.0.1</Version>
<PackageId>DbUpdater</PackageId>
<Product>DbUpdater</Product>
<PackageVersion>1.0.1</PackageVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
</ItemGroup>
</Project>
我们将它打包到我们的 Nuget 服务器dotnet pack
。然后在目标文件夹中,我们有以下 .csproj 文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
<DotNetCliToolReference Include="DbUpdater" Version="1.0.1" />
</ItemGroup>
</Project>
我们从这个文件夹中恢复它并执行:
dotnet restore
dotnet dbupdate
突然,我们收到了 onDbSet
的ToList
方法调用:
System.Data.SqlClient is not supported on this platform
将它作为 dotnet CLI 工具启动肯定存在问题。然而,我们未能得到这个问题是什么以及如何解决它。在网上搜索并没有给我们任何尝试的想法。
解决方案
我遇到了同样的问题,这是因为使用了错误版本的 System.Data.SqlClient,在我的情况下,应用程序是使用 .NET 4.6 和 .Net Standard 2.0 中的类库构建的,它依赖于 System .Data.SqlClient。在生产环境中替换适当版本的 System.Data.SqlClient(在我的情况下为 .NET 4.6)后,该问题得到解决。