Sto usando ASP.NET Core 2 con Entity Framework Core 2.0.2. Ho creato un comando contestuale e il comando Add-Migrations
in Package Manager Controller funziona correttamente.
Tuttavia, quando viene utilizzato il comando Update-Database
, viene visualizzato un errore:
System.Data.SqlClient non è supportato su questa piattaforma
Non riesco a capire dove sia il problema. Mi potete aiutare? Grazie.
Il mio file .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>
Mi sono imbattuto nello stesso problema un paio di giorni fa - non sono sicuro di quale sia il problema di fondo, ma il ripristino di alcuni dei pacchetti di EntityFrameworkCore
EntityFrameworkCore su 2.0.0 sembra aver risolto il problema per me. Questi sono i pacchetti che ho declassato:
<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" />
Lo stesso problema qui, ma per me è un errore da parte di System.Data.SqlClient caricarsi dinamicamente come parte di un plugin. Le nostre plugin plugin vengono caricate in modo dinamico tramite Autofac e un servizio di controllo seleziona quello corretto in fase di esecuzione. Sfortunatamente System.Data.SqlClient non verrà caricato in modo dinamico in questo modo, causando il messaggio di errore sopra riportato. Quindi ho dovuto caricarlo all'avvio del servizio di controllo. Questo ovviamente non è l'ideale, ma per ora è una soluzione utilizzabile poiché tutti i nostri plugin sono ancora sotto il nostro controllo.
Sarò più specifico, seguendo una domanda nei commenti.
Un servizio seleziona i plug-in in fase di esecuzione. I plug-in registrano le proprie dipendenze tramite Autofac e se tale dipendenza è un pacchetto Nuget, includeranno anche il pacchetto come una normale dipendenza Nuget.
Il servizio di controllo registra le DLL del plug-in all'avvio e la prima volta che vengono utilizzate vengono caricate anche le dipendenze del plug-in. Quando si tenta di caricare System.Data.SqlClient in seguito a una chiamata al plug-in che utilizza SqlClient, vengono visualizzati i risultati dell'errore "non supportato".
L'impostazione di System.Data.SqlClient come dipendenza Nuget nel servizio di controllo funziona correttamente e la libreria viene caricata correttamente senza errori. Tuttavia, questo non è l'ideale perché la libreria SqlClient deve sempre essere caricata dal servizio di controllo anche se il plug-in selezionato per eseguirlo non ne ha bisogno.
In altre parole, la libreria SqlClient viene sempre caricata all'avvio del servizio occupando risorse, ecc. Quando potrebbe non essere nemmeno necessaria. Ma almeno funziona.