2015-12-19 25 views
10

Sto cercando di sviluppare la mia prima applicazione web ASP.Net e nella mia soluzione ho due progetti. A Web Application e Class Library (Package). Quando costruisco la versione ASP.Net 4.5 di questa applicazione, inserisco le mie entità Entity Framework 6 in una libreria di classi, quindi lo sto facendo nella versione ASP.Net 5. Il problema è quando installo EntityFramework.Commands alla libreria di classi ottengo l'errore:Comandi EntityFramework nel pacchetto della libreria di classi ASP.Net 5?

The dependency EntityFramework.Command 7.0.0-rc1-final in Project DBEntities does not support framework .NetPlatform, Version = 5.4

mia comprensione da this SO question è che dotnet5.4 è il nuovo .Net 5 che dovrebbe essere supportato da EF7.

Ecco il mio project.json di file:

{ 
    "version": "1.0.0-*", 
    "description": "FFInfo.DAL Class Library", 
    "authors": [ "Mathew" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 
    "frameworks": { 
     "dotnet5.4": { 
      "dependencies": { 
       "Microsoft.CSharp": "4.0.1-beta-23516", 
       "System.Collections": "4.0.11-beta-23516", 
       "System.Linq": "4.0.1-beta-23516", 
       "System.Runtime": "4.0.21-beta-23516", 
       "System.Threading": "4.0.11-beta-23516" 
      } 
     } 
    }, 
    "dependencies": { 
     "EntityFramework.Commands": "7.0.0-rc1-final", 
     "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final" 
    } 
} 

Ti ho installare il pacchetto sbagliato, è EF7 cambiato così tanto che sto costruendo la classe sbagliata, o mi sto perdendo qualcosa nel mio file JSON?

EDIT: suggerimenti basati off nuovo file project.json

{ 
    "version": "1.0.0-*", 
    "description": "FFInfo.DAL Class Library", 
    "authors": [ "Mathew" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 
    "frameworks": { 
     "dotnet5.4": { 
      "dependencies": { 
       "Microsoft.AspNet.Hosting.Abstractions": "1.0.0-*", 
       "Microsoft.Dnx.Runtime": "1.0.0-*", 
       "Microsoft.Extensions.CommandLineUtils.Sources": { 
        "version": "1.0.0-*", 
        "type": "build" 
       }, 
       "Microsoft.Extensions.PlatformAbstractions": "1.0.0-*", 
       "System.Console": "4.0.0-*", 
       "System.IO.FileSystem": "4.0.1-*" 
      } 
     }, 
     "netcore50": { 
      "bin": { 
       "assembly": "lib\\netcore50\\_._" 
      } 
     }, 
     "dependencies": { 
      "EntityFramework.Commands": "7.0.0-rc1-final", 
      "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final" 
     } 
    } 
} 
+0

Il framework 'dotnet5.4' è sinonimo di' dnxcore50' e non 'dnx451' (vedere [l'annuncio ufficiale] (https://github.com/aspnet/Announcements/issues/98)). Personalmente trovo che i cambiamenti di nome siano diversi. ** Prima di tutto ti consiglio di rinominare 'dotnet5.4' in' dnxcore50'. ** Probabilmente dovresti usare 'net451' o' dnx451' invece di '" frameworks "." Dotnet5.4 "." Dipendenze " 'se la libreria di classi è per ASP.Net 4.5 principalmente? In ogni caso, raccomanderei di aggiungere "" dnx451 ": {}' (o '" net451 ": {}') di nuovo a '" frameworks "'. Se si è in grado di riprodurre il problema, posso provare ad aiutare di più. – Oleg

+0

@Oleg Non voglio che sia indirizzato a '.Net 4.5' Desidero che sia indirizzato a' .Net 5.0 core' Questa 'Libreria di classi' è per la versione' ASP.Net 5' della mia app web. – Matthew

+2

Penso che il tuo problema potrebbe essere risolto da ** rinominando '" dotnet5.4 "' a '" dnxcore50 "' **. Se funzionasse vorrei pubblicare la mia risposta con una spiegazione più dettagliata. Penso che tu possa rimuovere anche tutte le "dipendenze" 'incluse in" framework "." Dotnet5.4 "' ('" frameworks "." Dnxcore50 "') e probabilmente usano le comuni "dipendenze" ', ma includono solo dipendenze veramente richieste. L'ottimizzazione di '" frameworks "' 'è indipendente dal tuo problema principale. – Oleg

risposta

15

Suppongo che il motivo del problema ha natura tecnica pura. The announcement dichiara la ridenominazione di dnx451 in net451 e dnxcore50 in dotnet5.4, ma si consiglia di utilizzare tale ridenominazione solo per le librerie di classi (che si pubblica su NuGet ad esempio per condividerle con altri). Se ti capisco correttamente, sviluppi applicazione che usa le librerie di classi e quindi dovresti usare dnxcore50 invece di dotnet5.4. Pertanto, è necessario rinominare la stringa "dotnet5.4" nella stringa nella stringa "dnxcore50" in the file project.json per risolvere il problema.

Indipendentemente dalla raccomandazione di cui sopra voglio aggiungere la mia comprensione del problema, perché si ottiene l'errore su EntityFramework.Command 7.0.0-rc1-final.

Capisco la ridenominazione dei framework come il passo verso le modifiche future che pianificano Microsoft. D'altra parte tutti i nomi dei quadri saranno interpretati come nomi diversi. Vi suggerisco di confrontare le informazioni sulle dipendenze visualizzate nella pagina https://www.nuget.org/packages/EntityFramework.Commands/7.0.0-rc1-final dalle informazioni corrispondenti da https://www.nuget.org/packages/EntityFramework.MicrosoftSqlServer/7.0.0-rc1-final. Le dipendenze di EntityFramework.MicrosoftSqlServer (che non hanno problemi con l'utilizzo di dotnet5.4) sembra sull'immagine

enter image description here

ho segnato leggere la parte responsabile per dotnet5.4. D'altra parte le dipendenze di EntityFramework.Commands sembra sulla foto qui sotto:

enter image description here

dove non ci sono sezione" .NETPlatform 5.4" , che corrisponde al nuovo nome dotnet5.4.

suppongo che si tratta di un bug in the part di project.json di EntityFramework.Commands:

"netcore50": { 
    "bin": { 
    "assembly": "lib\\netcore50\\_._" 
    } 
} 

Suppongo che una persona deve cambiare netcore50-dotnet5.4 nelle linee per sostenere nome nuovo quadro dotnet5.4 correttamente. Uno chould sostituire il contenuto del "netcore50" alla copia da dnxcore50 (vedi the lines):

"dotnet5.4": { 
    "dependencies": { 
    "Microsoft.AspNet.Hosting.Abstractions": "1.0.0-*", 
    "Microsoft.Dnx.Runtime": "1.0.0-*", 
    "Microsoft.Extensions.CommandLineUtils.Sources": { 
     "version": "1.0.0-*", 
     "type": "build" 
    }, 
    "Microsoft.Extensions.PlatformAbstractions": "1.0.0-*", 
    "System.Console": "4.0.0-*", 
    "System.IO.FileSystem": "4.0.1-*" 
    } 
} 

Probabilmente si dovrebbe evento aumentare alcuni numeri di versione delle DLL di riferimento di cui sopra, ma ancora sarà in grado di utilizzare EntityFramework.Commands sotto "dotnet5.4" fino a quando la nuova versione fissa sarà pubblicata.

AGGIORNATO: Ho proposto the issue al team di sviluppatori EntityFramework. Includerò la risposta di Microsoft sul problema dopo averlo capito.

+0

Ma "EntityFramework.Commands' non è una libreria di classi, è una [applicazione] (https://github.com/aspnet/EntityFramework/blob/dev/src/EntityFramework.Commands/Commands/Program.cs) ... –

+0

@StaffordWilliams: Penso che al momento ci siano alcune differenze nella terminologia. Per me la DLL non è un'applicazione. Indipendentemente dalla classificazione di "EntityFramework.Commands" deve essere compilato con "" dotnet5.4 "' as "" frameworks "' in [project.json] (https://github.com/aspnet/EntityFramework/blob/ dev/src/EntityFramework.Commands/project.json # L19) se si vuole permettere di usarlo nelle applicazioni, che lo usano e si compilano anche per 'dotnet5.4'. Puoi provare a riprodurre il problema in alcuni progetti che usano EntityFramework. Otterrai l'errore rinominando 'dnxcore50' in' dotnet5.4'. – Oleg

+0

Ho provato a copiare le bugie a cui mi hai collegato ma ora ho ottenuto che 'The dependecny Microsoft.Extensions.CommandLineUtils.Sources> = 1.0.0- * non può essere risolto '. e lo stesso errore per 'Microsoft.Dnx.Runtime' quindi non penso che la sola sostituzione sia la soluzione – Matthew

Problemi correlati