Questo mi confonde. Ho capito che DNX e .NET Core CLI erano solo strumenti per l'esecuzione di app .NET Core. Se questo è solo uno strumento, perché la migrazione da uno all'altro richiede modifiche al codice?
DNVM/DNU/DNX non erano solo strumenti. DNX era anche il runtime. Era responsabile del bootstrap del CLR e della chiamata dell'applicazione. Ciò significava anche che aveva molte informazioni sul runtime e sull'applicazione, come dipendenze, ambiente, ecc. Queste informazioni sono state rese disponibili all'applicazione attraverso vari servizi che è possibile iniettare, come IRuntimeEnvironment
, IApplicationEnvironment
e ILibraryManager
.
A sua volta, MVC ha un servizio chiamato IAssemblyProvider
. Questo è responsabile della fornitura degli assembly in cui MVC dovrebbe cercare controller, tra le altre cose. L'implementazione predefinita di questo, era basata su ILibraryManager
, che è un servizio specifico DNX. Ciò significa che non funzionerà più quando si passa a un runtime basato su dotnet, che viene disattivato dai pacchetti, invece di utilizzare uno strumento separato, come DNVM.
Per risolvere questo problema, il team MVC ha iniziato la propria attività in base a entrambi i servizi DNX e la nuova alternativa dotnet (Microsoft.Extensions.DependencyModel
). Puoi vedere il codice here. In pratica controlla se lo specifico DN23 ILibraryManager
è disponibile e, in caso contrario, ricade sull'API dotnet alternativa.
Il problema con questo approccio è che introduce extra, e nella maggior parte dei casi, ridondanti, dipendenze (Microsoft.Extensions.PlatformAbstractions.Dnx
) in MVC, quando la maggior parte delle persone inizierà a utilizzarlo con strumenti e runtime dotnet. Ricorda; DNX ecc. È ancora roba beta e sarà rimosso da RTM.
Invece, hanno optato per la soluzione corrente; avere un pacchetto separato, Microsoft.AspNetCore.Mvc.Dnx
, che contiene, tra le altre cose, lo IAssemblyProvider
basato su DNX per MVC. Puoi vedere che cos'è il metodo AddMvcDnx
here.
Ciò significa che le poche persone che stanno seguendo le pre-release dovranno apportare alcune modifiche al loro codice, per poter continuare a funzionare su DNX (anche se mi trasferirei a dotnet ASAP), mentre nuove persone sarebbero Devo solo chiamare AddMvc
come al solito.
Spero che questo abbia un senso. Può essere davvero confuso :)
Grazie per la risposta. Capisco la cosa del cambio di nome e anche la necessità di avviare esplicitamente l'applicazione. Ma ancora, nell'annuncio di oggi vediamo persino "codice DNX specifico" come il metodo 'services.AddMvcDnx()' e i pacchetti DNX stessi. Perché c'è il codice specifico DNX? – user1620696
"È RC1 a RC2" È semplicemente sbagliato. È assolutamente il passaggio da DNX a dotnet che richiede questo cambio di codice. Certo, ci sono molte modifiche necessarie per passare da RC1 a RC2, ma la domanda riguardava specificamente DNX vs. dotnet e il metodo 'AddMvcDnx'. – khellang