5

Questa è la prima volta che faccio esperimenti con EF Core, ASP Net Core e Librerie di classi portatili con VS2015. Giusto per dire che mi sto frustrando.Tentativo di installare EF Core con il targeting per librerie di classi portatili .Net 4.6.1

Desidero creare una libreria in cui sia possibile 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 a indirizzare .NET 4.6 e ASP Net Nucleo ...

Targets

ottengo 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 pacchetto EntityFramework.Core da NuGet ...

Install EF Core Nuget

... ottengo il seguente output:

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 ========== 

E 'effettivamente possibile installare EF Nucleo in una libreria di classi Portable? Se sì, come - cosa devo fare con il progetto?

Mi sembra di andare in tondo alla ricerca di soluzioni online.

UPDATE 1

provato a 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 simile nel PCL, è che si lamenta:

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 Nucleo.

UPDATE 2

Ho creato un nuovo PCL mira .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 il seguente 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. 

stesso accade installazione EntityFramework.Core.7.0.0-RC1-finale.

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

+0

Correndo contro lo stesso problema atm – grmbl

+1

Salve, questo è un problema aperto su GitHub: https://github.com/aspnet/EntityFramework/issues/5176 (dipendenze di rottura) – grmbl

+1

Tutto quello che posso dire è che questo è irresponsabile delle squadre. Semplicemente non è accettabile avere un * RC * che non si installa nemmeno correttamente e anche in questo caso ha un sacco di problemi e che letteralmente non è stato aggiornato per 5 mesi! La cosa responsabile sarebbe almeno avere una * tabella di marcia pratica di cosa fare nel frattempo, altrimenti, DEVONO ESEGUIRE QUESTI RC da Nuget. La scorsa settimana ho installato EFCore su .NET 4.6 regolare, e ho avuto un sacco di problemi importanti sia nell'installazione (e dopo ridicole soluzioni alternative) che nell'esecuzione, solo per trovare quei bug * sono * corretti nella versione di myget rc2. –

risposta

2

Non so come funzionerà per le vostre esigenze di classe portatile, ma per .NET regolare (4.6 o ecc.), Ho scoperto quanto segue.(Vedi rant sotto)

Quindi non so se questo è 'kosher' o no, ma questa fonte funziona in questo momento:

Aggiungi origine del pacchetto NuGet (Opzioni - le fonti di pacchetti - Aggiungi (più)

Se si sta installando per SQLServer, basta installare questo:

Microsoft.EntityFrameworkCore.SqlServer

O scegliere un'altra dipendenza di livello superiore, che prenderà tutte le altre necessarie.

* [begin-rant] Questo è stato solo facendo scrupolosamente 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 un presunto e ancora contrassegnato come "RC" rilasciato quando è pieno di bug che sono già stati corretti nella versione rc2 radicalmente riprogettata, che non hanno pubblicizzato. [/ fine-rant] *

+0

Non riesco a tenere il passo ... EntityFramework.MicrosoftSqlServer è ora Microsoft.EntityFrameworkCore.SqlServer ... E cos'è myget.org. Mi piacciono le cose per funzionare. Fuori dalla scatola. Non voglio prendere una macchina e scoprire che ho bisogno di collegare tutti gli elementi elettrici. Speriamo che Microsoft lo risolva. Good rant btw – Andez

+0

Ho impostato un nuovo pacchetto sorgente, quindi ho creato un nuovo progetto PCL. Non aggiungerà Microsoft.EntityFrameworkCore.SqlServer ad esso. Un sacco di pacchetti incompatibili lì. EF Core da installazioni di nuget in una libreria di classi standard. Ma voglio aggiungere la mia "libreria di classi" a un progetto di base di aspnet - Ho avuto problemi nel fare riferimento a una libreria di classi nel progetto principale di aspnet che ci crediate o no. Quindi sono andato su questa strada. – Andez

0

Hai provato cambiando le importazioni quadri a:

"frameworks": { 
    "netcoreapp1.0": { 
    "imports": "portable-net451+win8" 
    } 
} 
0

a creare un progetto Libreria di classi core 4.6 e utilizzando questo codice nel project.json

{ 
     "dependencies": { 
     "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final", 
     "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0-rc2-final", 
     "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview1-final", 
     "Microsoft.NETCore.App": { 
      "version": "1.0.0-rc2-3002702", 
      "type": "platform" 
     } 
     }, 

     "tools": { 
     "Microsoft.AspNetCore.Server.IISIntegration.Tools": { 
      "version": "1.0.0-preview1-final", 
      "imports": "portable-net45+win8+dnxcore50" 
     }, 
     "Microsoft.EntityFrameworkCore.Tools": { 
      "version": "1.0.0-preview1-final", 
      "imports": [ 
      "portable-net45+win8+dnxcore50", 
      "portable-net45+win8" 
      ] 
     } 
     }, 

     "frameworks": { 
     "netcoreapp1.0": { 
      "imports": [ 
      "dotnet5.6", 
      "dnxcore50", 
      "portable-net45+win8" 
      ] 
     } 
     } 
    } 
Problemi correlati