web-dev-qa-db-ja.com

System.Data.SqlClientはこのプラットフォームではサポートされていません

Entity Framework Core 2.0.2でASP.NET Core 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>
9
Sasitha Iresh

私は数日前に同じ問題に遭遇しました-根本的な問題が何かはわかりませんが、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" />
6
Carter Musick

ここでも同じ問題ですが、私にとっては、プラグインの一部として動的にロードするのがSystem.Data.SqlClientの部分の失敗です。私たちのプラグインDLLはAutofacを介して動的にロードされ、制御サービスは実行時に正しいものを選択します。残念ながら、System.Data.SqlClientはこのように動的にロードされないため、上記のエラーメッセージが表示されます。そのため、制御サービスの起動時にそれをロードする必要がありました。これは明らかに理想的ではありませんが、今のところ、すべてのプラグインが私たちの管理下にあるため、使用可能な回避策です。

コメントの質問に続いて、私はより具体的になります。

サービスは実行時にプラグインを選択します。プラグインはAutofacを介して独自の依存関係を登録し、その依存関係がNugetパッケージである場合、通常のNuget依存関係としてパッケージも含めます。

制御サービスはプラグインDLLを起動時に登録し、それらが初めて使用されるときにプラグインの依存関係もロードされます。 SqlClientを使用するプラグインの呼び出しに続いてSystem.Data.SqlClientのロードが試行されると、「サポートされていない」エラーが発生します。

System.Data.SqlClientを制御サービスのNuget依存関係として設定しても問題なく機能し、ライブラリはエラーなしで正しくロードされます。ただし、実行するために選択されたプラグインがSqlClientライブラリーを必要としない場合でも、SqlClientライブラリーは常に制御サービスによってロードされる必要があるため、これは理想的ではありません。

言い換えると、SqlClientライブラリは、サービスの起動時に常にリソースが占有されている場合などに、必要にならない場合に読み込まれます。しかし、少なくともそれは機能します。

4
robs

私はこの問題に最近遭遇しました。通常の.netフレームワークアプリによって.net標準2.0クラスが消費されています。 (.net 4.7.x)。最終的に私の問題を修正した唯一のものは、通常の.netアプリでpackages.configからPackageReferenceに移行することでした。

1
Blane Bunderson