Cercando di installare EF Core con il targeting per librerie di classi portatili .Net 4.6.1

entity-framework entity-framework-core portable-class-library

Domanda

Questa è la prima volta che faccio esperimenti con EF Core, ASP Net Core e Portable Class Libraries con VS2015. Giusto per dire che mi sto frustrando.

Voglio creare una libreria in cui posso installare EntityFramework.Core. Questa libreria deve essere utilizzata in un'applicazione WPF e in un'applicazione Web Core ASP NET, ignorando per ora qualsiasi buon concetto di applicazione a livelli. Il mio pensiero era di creare una libreria di classi portatili.

Utilizzando il modello di progetto in cui ho scelto .NET 4.6 e ASP Net Core ...

obiettivi

Ricevo un progetto con una classe e un file project.json come segue:

{
    "supports": {
        "net46.app": {},
        "dnxcore50.app": {}
    },
    "dependencies": {
        "Microsoft.NETCore": "5.0.0",
        "Microsoft.NETCore.Portable.Compatibility": "1.0.0"
    },
    "frameworks": {
        "dotnet": {
            "imports": "portable-net452"
        }
    }
}

Ora quando installo il pacchetto EntityFramework.Core da nuget ...

Installa EF Core Nuget

... ottengo il seguente risultato:

Restoring packages for 'Acme.PCLEFClassLib'.
Restoring packages for K:\TFS\TestApps\Projects\DotNetCore\Acme.PCL1\Acme.PCL1\project.json...
Detected package downgrade: System.Reflection from 4.1.0-beta-23225 to 4.0.10 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> Microsoft.Extensions.DependencyInjection.Abstractions (>= 1.0.0-rc1-final) -> System.Reflection (>= 4.1.0-beta-23225) 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Reflection (>= 4.0.10)
Detected package downgrade: System.Reflection from 4.1.0-beta-23225 to 4.0.10 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> Microsoft.Extensions.Logging.Abstractions (>= 1.0.0-rc1-final) -> System.Reflection (>= 4.1.0-beta-23225) 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Reflection (>= 4.0.10)
Version conflict detected for System.Collections. 
 Acme.PCLEFClassLib (>= 1.0.0) -> EntityFramework.Core (>= 7.0.0-rc1-final) -> System.Collections (>= 4.0.11-beta-23516) 
 Acme.PCLEFClassLib (>= 1.0.0) -> Microsoft.NETCore.Portable.Compatibility (>= 1.0.0) -> Microsoft.NETCore.Runtime (>= 1.0.0) -> Microsoft.NETCore.Runtime.CoreCLR-x86 (>= 1.0.0) -> System.Collections (= 4.0.10).
EntityFramework.Core 7.0.0-rc1-final is not compatible with .NETPlatform,Version=v5.0.
Some packages are not compatible with .NETPlatform,Version=v5.0.
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0.
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0.
Some packages are not compatible with DNXCore,Version=v5.0.
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0 (win7-x86).
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0 (win7-x86).
Some packages are not compatible with DNXCore,Version=v5.0 (win7-x86).
Ix-Async 1.2.5 is not compatible with DNXCore,Version=v5.0 (win7-x64).
Remotion.Linq 2.0.1 is not compatible with DNXCore,Version=v5.0 (win7-x64).
Some packages are not compatible with DNXCore,Version=v5.0 (win7-x64).
Package restore failed for 'Acme.PCLEFClassLib'.
Package restore failed. Rolling back package changes for 'Acme.PCLEFClassLib'.
========== Finished ==========

È effettivamente possibile installare EF Core in una libreria di classi portatile? Se sì, come - cosa devo fare con il progetto?

Sento che sto girando in tondo alla ricerca di soluzioni online.

AGGIORNAMENTO 1

Ho provato ad installare EntityFramework.MicrosoftSqlServer nel mio PCL.

Dato che EntityFramework.MicrosoftSqlServer viene installato durante la creazione di un progetto ASP Net Core standard, che utilizza il framework dnxcore50. Come mai se faccio lo stesso nel PCL, si lamenta che:

EntityFramework.MicrosoftSqlServer 7.0.0-rc1-final is not compatible with .NETPlatform,Version=v5.0.

Se questo è il caso, allora come mai si installa in un progetto ASP NET Core.

AGGIORNAMENTO 2

Ho creato un nuovo targeting per PCL .NET 4.5.1. Ho quindi installato EntityFramework.MicrosoftSqlServer 7.0.0-rc1-final in quello via Nuget e non installa alcun problema. Anche se non posso ripeterlo ora. Ho appena creato una soluzione separata con un progetto di libreria PCL destinato a ASP NET Core e .NET 4.5.1. Questo produce quanto segue ora:

Attempting to gather dependency information for package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' with respect to project 'AnotherPCLEFFUP', targeting '.NETPortable,Version=v4.5,Profile=Profile75'
Attempting to resolve dependencies for package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' with DependencyBehavior 'Lowest'
Resolving actions to install package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final'
Resolved actions to install package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final'
Install failed. Rolling back...
Package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' does not exist in project 'AnotherPCLEFFUP'
Package 'EntityFramework.MicrosoftSqlServer.7.0.0-rc1-final' does not exist in folder 'K:\TFS\TestApps\Projects\DotNetCore\AnotherPCLEFFUP\packages'
Invalid portable frameworks.

Lo stesso accade installando EntityFramework.Core.7.0.0-rc1-final.

Giusto per dire, questo è assolutamente frustrante. Forse sto abbaiando sull'albero sbagliato o sto solo abbaiando pazzo oggi.

Risposta popolare

Non so come funzionerà per le tue esigenze di classe portatile, ma per i normali .NET (4.6 o ecc.) Ho scoperto quanto segue. (vedi rant sotto)

Quindi non so se questo è "kosher" o no, ma questa fonte funziona proprio ora:

Aggiungi l'origine del pacchetto nuget (Opzioni - Fonti del pacchetto - Aggiungi (più)

Se stai installando per SqlServer, basta installare questo:

Microsoft.EntityFrameworkCore.SqlServer

Oppure scegli un'altra dipendenza di primo livello che raccoglierà tutti gli altri necessari.

* [begin-rant] Questo è stato solo scrutando le discussioni sui github EF. È assolutamente imperdonabile che non abbiano una descrizione pratica che spieghi cosa fare adesso. Dovrebbero tirare la versione "RC" 1, con tutti i suoi bug e con il suo design radicalmente diverso da quello a cui stanno lavorando ora, e che non è stata aggiornata per oltre 5 mesi (! E questo è con il pre -release 'mark checked!), interamente da nuget.

Lasciatemi aggiungere: amo tutto ciò che questi ragazzi stanno facendo, amo i nuovi bit, molte cose davvero buone. Ma non dovremmo lasciarlo sospeso per un anno e mezzo con una presunta e ancora contrassegnata come "RC" quando è piena di bug che sono già stati risolti nella versione rc2 radicalmente riprogettata, che non hanno pubblicizzato. [/ End-rant] *



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow