web-dev-qa-db-fra.com

System.Data.SqlClient n'est pas pris en charge sur cette plate-forme

J'utilise ASP.NET Core 2 avec Entity Framework Core 2.0.2. J'ai créé un contexte et la commande Add-Migrations Dans Package Manager Controller fonctionne très bien.

Cependant, lorsque la commande Update-Database Est utilisée, j'obtiens une erreur:

System.Data.SqlClient n'est pas pris en charge sur cette plate-forme

Je ne peux pas comprendre où est le problème. Pouvez-vous m'aider? Merci.

Mon fichier .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

J'ai rencontré le même problème il y a quelques jours - je ne sais pas quel est le problème sous-jacent, mais le retour de certains des packages de nuget EntityFrameworkCore à 2.0.0 semble avoir résolu le problème pour moi. Voici les packages que j'ai rétrogradés:

<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

Même problème ici mais pour moi, c'est un échec de la part de System.Data.SqlClient à charger dynamiquement dans le cadre d'un plugin. Nos DLL de plugin sont chargées dynamiquement via Autofac et un service de contrôle sélectionne le bon au moment de l'exécution. Malheureusement, System.Data.SqlClient ne se chargera pas dynamiquement comme ceci, ce qui entraînera le message d'erreur ci-dessus. J'ai donc dû le charger au démarrage du service de contrôle. Ce n'est évidemment pas idéal mais pour l'instant c'est une solution de contournement utilisable car tous nos plugins sont toujours sous notre contrôle.

Je serai plus précis, suite à une question dans les commentaires.

Un service sélectionne les plug-ins au moment de l'exécution. Les plug-ins enregistrent leurs propres dépendances via Autofac et si cette dépendance est un package Nuget, ils incluront également le package en tant que dépendance Nuget normale.

Le service de contrôle enregistre les DLL du plug-in au démarrage et la première fois qu'elles sont utilisées, les dépendances du plug-in sont également chargées. Lorsque la charge System.Data.SqlClient est tentée à la suite d'un appel au plug-in qui utilise SqlClient, les résultats d'erreur "non pris en charge".

La définition de System.Data.SqlClient en tant que dépendance Nuget dans le service de contrôle fonctionne correctement et la bibliothèque est chargée correctement sans erreur. Cependant, ce n'est pas idéal car la bibliothèque SqlClient doit toujours être chargée par le service de contrôle, même si le plug-in sélectionné pour l'exécuter n'en a pas besoin.

En d'autres termes, la bibliothèque SqlClient est toujours chargée au démarrage du service, occupant des ressources, etc. lorsqu'elle n'est même pas nécessaire. Mais au moins ça marche.

4
robs

J'ai rencontré ce problème récemment avec des classes .net standard 2.0 consommées par une application de framework .net standard. (.net 4.7.x). La seule chose qui a finalement résolu mon problème était la migration de packages.config vers PackageReference sur l'application .net standard.

1
Blane Bunderson