Come posso diagnosticare dipendenze mancanti (o altri errori del caricatore) in dnx?


133

Sto cercando di eseguire una versione modificata dell'esempio HelloWeb per ASP.NET vNext su DNX utilizzando Kestrel. Capisco che questo è molto al limite, ma spero che il team ASP.NET almeno mantenga funzionante l'app Web più semplice possibile :)

Ambiente:

  • Linux (Ubuntu, praticamente)
  • Mono 3.12.1
  • DNX 1.0.0-beta4-11257 (anch'io ho 11249 disponibili)

Codice "Web app", in Startup.cs:

using Microsoft.AspNet.Builder;
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseWelcomePage();
    }
}

Configurazione del progetto, in project.json:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta4",
    "Microsoft.Framework.Runtime": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Common": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Loader": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

kpm restore sembra funzionare bene.

Quando provo a correre, tuttavia, ricevo un'eccezione che suggerisce che Microsoft.Framework.Runtime.IApplicationEnvironmentnon è possibile trovare. Riga di comando ed errore (in qualche modo riformattato)

.../HelloWeb$ dnx . kestrel
System.IO.FileNotFoundException: Could not load file or assembly 
'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
or one of its dependencies.
File name: 'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
    (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke 
    (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder,
     System.Object[] parameters, System.Globalization.CultureInfo culture)
    [0x00000] in <filename unknown>:0

Mentre ovviamente, il mio bisogno più urgente è quello di risolvere questo problema, apprezzerei anche i consigli su come spostarmi per diagnosticare cosa non va in modo da poter risolvere da solo problemi simili in futuro. (È anche probabile che questa domanda sia più utile anche per gli altri.)

Ho trovato Microsoft.Framework.Runtime.IApplicationEnvironmentnella Microsoft.Framework.Runtime.Interfacessorgente dell'assembly e non sembra che sia cambiato di recente. Non è chiaro perché l'eccezione mostri il nome come se fosse un intero assembly in sé, anziché solo un'interfaccia all'interno di un altro assembly. Immagino che ciò possa essere dovuto a interfacce neutre di assemblaggio , ma non è chiaro dall'errore. ( [AssemblyNeutral]è morto, quindi non è così ... )


per curiosità, intendevi collegarti a github.com/aspnet/Home/wiki/Assembly-Neutral-Interfaces per il link delle interfacce neutre dell'assembly o da qualche altra parte? Come è attualmente rotto
cgijbels

@cgijbels: Grazie - In realtà intendevo collegarmi a davidfowl.com/assembly-neutral-interfaces ma il tuo collegamento probabilmente è meglio ...
Jon Skeet

Le interfacce neutre dell'assieme @JonSkeet sono ora sparite.
rimorchiatore

@tugberk: Accidenti, davvero? È interessante: hai un link che potrei includere in una modifica?
Jon Skeet,

Risposte:


144

Buona domanda. Per il tuo problema specifico, sembra che tu abbia una discrepanza nelle dipendenze risolte. Quando accadono cose del genere, è probabile che tu stia eseguendo la tua applicazione su un dnx incompatibile. Stiamo ancora apportando modifiche sostanziali, quindi se noti che manca il metodo di tipo mancante, è probabile che tu abbia finito con l'esecuzione di betaXpacchetti e betaYdnx o viceversa.

Ancor più specificamente, le interfacce neutre di Assembly sono state rimosse in beta4 ma sembra che l'applicazione in esecuzione le stia ancora utilizzando.

Abbiamo in programma di farlo in modo che i pacchetti possano contrassegnare il minimo dnx che devono eseguire per rendere più chiaro il messaggio di errore. Anche col passare del tempo, i cambiamenti di rottura moriranno.

In generale, però, mi sento come se fosse il momento di scrivere una guida su come diagnosticare problemi come questo quando si utilizza il dnx (poiché è piuttosto diverso da .NET esistente).

Le dipendenze che inserisci project.jsonsono solo di livello superiore. Le versioni sono anche sempre minime (è proprio come un pacchetto NuGet). Questo significa che quando specifichi Foo 1.0.0-beta4che stai davvero specificando Foo >= 1.0.0-beta4. Questo significa che se lo chiedi MVC 0.0.1e la versione minima del tuo feed configurato è MVC 3.0.0, otterrai quella. Inoltre, non galleggiamo MAI la tua versione, a meno che non la specifichi. Se si richiede 1.0.0 ed esiste, si otterrà 1.0.0 anche se esistono versioni più recenti. La specifica di versioni vuote è SEMPRE negativa e non sarà consentita nelle build successive.

C'è una nuova funzionalità che stiamo introducendo in nuget chiamata versioni mobili. Oggi funziona solo con il tag pre-release, ma nella prossima versione funzionerà su più parti della versione. Questo è simile alla sintassi npm e gem per specificare gli intervalli di versioni nel file delle specifiche del pacchetto.

1.0.0-*- Significa che mi dà la versione PIÙ ALTA corrispondente al prefisso (in base alle regole semantiche di versioning ) OPPURE se non esiste una versione corrispondente a quel prefisso, usa il comportamento normale e procurami la versione PIÙ BASSA> = la versione specificata.

Quando esegui il ripristino nelle ultime build, verrà scritto un file chiamato project.lock.json. Questo file avrà la chiusura transitiva delle dipendenze per tutti i framework di destinazione definiti in project.json.

Quando qualcosa del genere fallisce puoi fare quanto segue:

Dai un'occhiata alle dipendenze risolte usando kpm list . Questo ti mostrerà le versioni risolte dei pacchetti a cui fa riferimento il tuo progetto e quale dipendenza lo ha attirato. Ad esempio, se A -> B, mostrerà:

UN
  -> B
B
 ->

Output effettivo dell'elenco KPM:

Elenco delle dipendenze per ClassLibrary39 (C: \ Users \ davifowl \ Documents \ Visual Studio 14 \ Projects \ ClassLibrary39 \ src \ ClassLibrary39 \ project.json)

[Target framework DNX,Version=v4.5.1 (dnx451)]

 framework/Microsoft.CSharp 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/mscorlib 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System.Core 4.0.0.0
    -> ClassLibrary39 1.0.0
*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0

[Target framework DNXCore,Version=v5.0 (dnxcore50)]

*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0
 System.Runtime 4.0.20-beta-22709
    -> ClassLibrary39 1.0.0

* significa dipendenza diretta.

Se hai uno studio visivo funzionante (che al momento non funziona con DNX), puoi guardare il nodo riferimenti. Ha gli stessi dati rappresentati visivamente:

Nodo Riferimenti

Diamo un'occhiata a come appare un errore di dipendenza:

Ecco il project.json

{
    "version": "1.0.0-*",
    "dependencies": {
        "Newtonsoft.Json": "8.0.0"
    },

    "frameworks" : {
        "dnx451" : { 
            "dependencies": {
            }
        },
        "dnxcore50" : { 
            "dependencies": {
                "System.Runtime": "4.0.20-beta-22709"
            }
        }
    }
}

Newtonsoft.Json 8.0.0non esiste. Quindi l'esecuzione di kpm restore mostra quanto segue:

inserisci qui la descrizione dell'immagine

Quando si diagnostica quando il ripristino potrebbe non essere riuscito, guardare le richieste HTTP effettuate, ti dicono quali sono le fonti del pacchetto configurato kpm. Nota nell'immagine sopra, c'è una CACHErichiesta. Questa è la cache integrata basata sul tipo di risorsa (nupkg o nuspec) e ha un TTL configurabile (vedi kpm restore --help). Se vuoi forzare kpma colpire le sorgenti NuGet remote, usa il --no-cacheflag:

Ripristino KPM --no-cache

Questi errori compaiono anche in Visual Studio nella finestra di output del registro del gestore pacchetti:

inserisci qui la descrizione dell'immagine

Nota a margine!

Fonti del pacchetto

Descriverò come funziona NuGet.config in questo momento (che probabilmente cambierà in futuro). Per impostazione predefinita, hai un NuGet.config con l'origine NuGet.org predefinita configurata globalmente in%appdata%\NuGet\NuGet.Config . È possibile gestire queste fonti globali in Visual Studio o con lo strumento da riga di comando NuGet. Dovresti sempre guardare alle tue fonti efficaci (quelle elencate nell'output di kpm) quando provi a diagnosticare i guasti.

Maggiori informazioni su NuGet.config qui

Torna alla realtà:

Quando le dipendenze sono irrisolte, l'esecuzione dell'applicazione ti darà questo:

> dnx . run
System.InvalidOperationException: Failed to resolve the following dependencies for target framework 'DNX,Version=v4.5.1':
   Newtonsoft.Json 8.0.0

Searched Locations:
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\{name}\project.json
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\test\{name}\project.json
  C:\Users\davifowl\.dnx\packages\{name}\{version}\{name}.nuspec
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\{name}.dll
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_32\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_64\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\{name}\{version}\{name}.dll

Try running 'kpm restore'.

   at Microsoft.Framework.Runtime.DefaultHost.GetEntryPoint(String applicationName)
   at Microsoft.Framework.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
   at Microsoft.Framework.ApplicationHost.Program.Main(String[] args)

Il runtime fondamentalmente tenta di convalidare che l'intero grafico delle dipendenze è stato risolto prima di tentare l'esecuzione. Se suggerisce l'esecuzione kpm restoreè perché non riesce a trovare le dipendenze elencate.

Un altro motivo per cui potresti ricevere questo errore è se stai eseguendo il sapore dnx sbagliato. Se l'applicazione specifica solo dnx451 e si tenta di eseguire CoreCLR dnx, è possibile che si verifichi un problema simile. Prestare molta attenzione al framework di destinazione nel messaggio di errore:

Per correre:

dnx4x - runs on dnx-clr-{etc}
dnxcore50 - runs on dnx-coreclr-{etc}

Quando stai cercando di eseguire, dovresti ricordare quella mappatura mentale da clr a framework di destinazione definita nel tuo project.json.

Questo appare anche in Visual Studio sotto il nodo riferimenti: Dipendenze irrisolte

I nodi contrassegnati come gialli non sono risolti.

Questi vengono visualizzati anche nell'elenco degli errori:

Elenco errori dipendenze irrisolte

Edificio

Questi errori compaiono anche durante la costruzione. Quando si crea dalla riga di comando, l'output è molto dettagliato e può essere estremamente utile durante la diagnosi dei problemi:

> kpm build

Building ClassLibrary39 for DNX,Version=v4.5.1
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Assembly dependency framework/mscorlib 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll

  Using Assembly dependency framework/System 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.dll

  Using Assembly dependency framework/System.Core 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll

  Using Assembly dependency framework/Microsoft.CSharp 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Microsoft.CSharp.dll


Building ClassLibrary39 for DNXCore,Version=v5.0
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Package dependency System.Console 4.0.0-beta-22709
    Source: C:\Users\davifowl\.dnx\packages\System.Console\4.0.0-beta-22709
    File: lib\contract\System.Console.dll

  Using Package dependency System.IO 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.IO\4.0.10-beta-22231
    File: lib\contract\System.IO.dll

  Using Package dependency System.Runtime 4.0.20-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Runtime\4.0.20-beta-22231
    File: lib\contract\System.Runtime.dll

  Using Package dependency System.Text.Encoding 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Text.Encoding\4.0.10-beta-22231
    File: lib\contract\System.Text.Encoding.dll

  Using Package dependency System.Threading.Tasks 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Threading.Tasks\4.0.10-beta-22231
    File: lib\contract\System.Threading.Tasks.dll

L'output mostra tutti gli assembly passati nel compilatore da pacchetti e riferimenti di progetto. Quando inizi a ricevere errori di compilazione, è utile guardare qui per assicurarsi che il pacchetto che stai utilizzando funzioni effettivamente su quella piattaforma di destinazione.

Ecco un esempio di un pacchetto che non funziona su dnxcore50:

{
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.Owin.Host.SystemWeb": "3.0.0"
    },

    "frameworks": {
        "dnx451": {
            "dependencies": {
            }
        },
        "dnxcore50": {
            "dependencies": {
                "System.Console": "4.0.0-beta-22709"
            }
        }
    }
}

Microsoft.Owin.Host.SystemWeb versione 3.0.0 non ha alcun assembly che gira su dnxcore50 (dai un'occhiata alla cartella lib del pacchetto decompresso). Quando corriamo kpm build:

Assemblee mancanti su dnxcore50

Notare che dice "utilizzando il pacchetto Microsoft.Owin.Host.SystemWeb" ma non c'è "File:". Questo potrebbe essere il motivo di un errore di compilazione.

Qui finisce la mia discarica di cervello


Sto cercando di utilizzare l'elenco dnu come suggerisci, per determinare perché dnx non è in grado di risolvere una dipendenza. Ma sto ricevendo un rosso "Impossibile individuare project.json". L'assembly si trova nella cartella degli artefatti, generata selezionando "Produce output su build". Qualche suggerimento su come procedere?
Mike Scott,

Cosa c'entra la cartella artefatti con qualcosa? Hai fatto riferimento alla dipendenza in project.json? Quel pacchetto a cui fai riferimento è disponibile su un feed configurato?
davidfowl,

17

Non so ancora del tutto che cosa non va, ma ora ho una serie di passaggi per rendere almeno più semplice provare le cose:

  • In caso di dubbio, reinstallare dnx
    • Scaricare la cache del pacchetto può essere utile
  • Verifica ~/.config/NuGet.configdi utilizzare i feed NuGet corretti

Ho finito per usare la seguente riga di comando per testare varie opzioni in modo ragionevolmente pulito:

rm -rf ~/.dnx/packages && rm -rf ~/.dnx/runtimes && dnvm upgrade && kpm restore && dnx . kestrel

Sembra che il mio problema sia davvero dovuto alle versioni errate delle dipendenze installate. Un numero di versione di "1.0.0-beta4"è apparentemente abbastanza diverso da "1.0.0-beta4-*". Ad esempio, la Kestreldipendenza ha installato la versione 1.0.0-beta4-11185 appena specificata come 1.0.0-beta4, ma la versione 1.0.0-beta4-11262 con -*la fine. Volevo specificare beta4esplicitamente per evitare di usare accidentalmente una build beta3 con il

La seguente configurazione del progetto funziona correttamente:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4-*",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4-*",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

6
Questo perché -*ti dà sempre l'ultima versione non definitiva, mentre senza di essa ottieni la versione più bassa che soddisfa tutte le dipendenze (come al solito con NuGet). Questo test ha alcuni esempi.
Alexander Köplinger,

2
@ AlexanderKöplinger: grazie, ha senso. Quindi ... beta4 è la prima beta4, mentre ... beta4- * è l'ultima beta4, giusto?
Jon Skeet,

4
"frameworks": {"dnx451": {}}se fosse stato risolto per me, non dnxcore50
ce n'era

Il tuo primo comando mi ha anche aiutato a superare l'essere bloccato sulla versione beta5. Ho provato a correre dnvm upgrade-self, questo non si aggiornava all'ultima versione. L'esecuzione del prompt dei comandi VS come admin ha mostrato la versione di dnvm come rc1..., tuttavia quando non come admin lo era beta5.... Dopo il comando, i prompt dei comandi sia admin che non admin sono stati mostrati come versione rc2...(più recente).
JabberwockyDecompiler

Per coloro che usano il mono e chiedersi se scegliere dnx451o dnxcore50questa risposta mi ha aiutato a capire un po 'di più questo argomento: stackoverflow.com/a/30846048/89590 Risposta breve: dnx451è appropriato per il mono.
Nate Cook,

8

È possibile impostare un var env denominato DNX_TRACEsu 1per visualizzare un TON più informazioni diagnostiche. Attenzione, ci sono molte più informazioni!


@JonSkeet A proposito, le altre risposte (inclusa la tua risposta automatica) contengono ottime informazioni sulla diagnosi e sulla riparazione del problema specifico che hai riscontrato. Ho tenuto questa risposta super breve perché è solo un'altra risposta diversa che potrebbe portare a ulteriori indizi sul perché il problema si è verificato in primo luogo.
Eilon,

Assolutamente - lo apprezzo :)
Jon Skeet,

3

Per farlo funzionare ho modificato il mio project.json.. ora sembra:

{
"dependencies": {
    "Kestrel": "1.0.0-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-*",
    "Microsoft.AspNet.Hosting": "1.0.0-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-*"
},
"commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    }
}

La chiave sembrava essere la sezione quadri.

Anche la ridenominazione ha cambiato il modo in cui k webfunziona ora dnx . webodnx . kestrel

Aggiornamento: ulteriori informazioni

Stranamente, dopo aver eseguito senza framework definiti, è andato e ho avuto un sacco di cose extra quando l'ho fatto kpm restore :

...
Installing Microsoft.Framework.Logging 1.0.0-beta4-11001
Installing Microsoft.Framework.Logging.Interfaces 1.0.0-beta4-11001
Installing Microsoft.Framework.DependencyInjection.Interfaces 1.0.0-beta4-11010
Installing Microsoft.Framework.DependencyInjection 1.0.0-beta4-11010
Installing Microsoft.Framework.ConfigurationModel 1.0.0-beta4-10976
Installing Microsoft.Framework.ConfigurationModel.Interfaces 1.0.0-beta4-10976
Installing Microsoft.AspNet.Hosting.Interfaces 1.0.0-beta4-11328
Installing Microsoft.AspNet.FeatureModel 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http 1.0.0-beta4-11104
Installing Microsoft.AspNet.FileProviders.Interfaces 1.0.0-beta4-11006
Installing Microsoft.Framework.Caching.Interfaces 1.0.0-beta4-10981
Installing Microsoft.AspNet.FileProviders 1.0.0-beta4-11006
Installing Microsoft.AspNet.Http.Core 1.0.0-beta4-11104
Installing Microsoft.AspNet.WebUtilities 1.0.0-beta4-11104
Installing Microsoft.Net.Http.Headers 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http.Interfaces 1.0.0-beta4-11104
Installing Microsoft.Framework.Runtime.Interfaces 1.0.0-beta4-11257
Installing Microsoft.AspNet.Server.Kestrel 1.0.0-beta4-11262
Installing Microsoft.Net.Http.Server 1.0.0-beta4-11698
Installing Microsoft.Net.WebSockets 1.0.0-beta4-11698
Installing Microsoft.Net.WebSocketAbstractions 1.0.0-beta4-10915
Installing Microsoft.Framework.WebEncoders 1.0.0-beta4-11104
Installing Microsoft.Framework.OptionsModel 1.0.0-beta4-10984
Installing Microsoft.AspNet.Http.Extensions 1.0.0-beta4-11104
Installing Microsoft.AspNet.Diagnostics.Interfaces 1.0.0-beta4-12451
Installing Microsoft.AspNet.RequestContainer 1.0.0-beta4-11328

.. poi ha funzionato bene. Poi sono tornato nella sezione framework

"frameworks": {
    "dnx451": {}
}

.. e ha ancora funzionato, mentre prima avrebbe generato un errore!

Molto strano!

(Sto correndo 1.0.0-beta4-11257)

Ulteriore aggiornamento

Ho avviato una nuova istanza di Ubuntu e ho avuto lo stesso errore di te. Il mio pensiero era che il problema potesse essere causato dal tentativo di ottenere pacchetti da nuget.orge non myget.org(che ha le cose più recenti), quindi sono NuGet.Configentrato in un radice del progetto ..

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/" />
    <add key="NuGet" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

.. questo sembra averlo corretto per me ottenendo le versioni corrette (dopo l'altra kpm restore).


1
Per quanto riguarda la parte "dnx. Kestrel" - in effetti, da qui il comando che ho mostrato :) Con quella configurazione, ottengo un errore diverso: System.TypeLoadException: Impossibile caricare il tipo 'Microsoft.Framework.DependencyInjection.LoggingServiceCollectionExtensions' dall'assembly 'Microsoft. Framework.Logging, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null '. Quale versione di DNX stai usando?
Jon Skeet,

1
Quando ho fatto "dnx. Web" la prima volta che ho ricevuto: `System.InvalidOperationException: impossibile risolvere le seguenti dipendenze per il framework di destinazione 'DNX, Versione = v4.5.1' e mi ha suggerito un elenco delle cose che mancavano.
Stephen Pope,

Interessante. Su quale piattaforma si trova, tra l'altro?
Jon Skeet,

Hai fatto 'source ~ / .bashrc' per ricaricare le variabili di ambiente dopo aver aggiornato DNX? Inoltre ho dovuto fare "dnvm upgrade" + "dnvm use default"
Stephen Pope,

DNX non era stato aggiornato da .bashrc ... probabilmente perché l'ho creato manualmente ieri. Proverò invece a utilizzare le istruzioni aggiornate ...
Jon Skeet,

2

In questi giorni, tutte le mie package.jsonversioni finiscono in"-rc2-*"

(Solo le eccezioni che ho visto finora sono i Microsoft.Framework.Configurationpacchetti, che devono essere "1.0.0-rc1-*"o "1.0.0-*")

Per quanto riguarda i "treni di versione" menzionati da @davidfowl, sembra che MOLTO dolore sia scomparso tra beta8 e rc2.

dnvm upgrade -u -arch x64 -r coreclr

Ho avuto la maggior fortuna coreclrcon questi 2 feed NuGet:

"https://www.myget.org/F/aspnetvnext/"
"https://nuget.org/api/v2/"

Quando io faccio sono mancante problemi dei pacchetti, il 90% del tempo è questi stessi colpevoli:

Newtonsoft.Json
Ix-Async
Remotion.Linq

Il più delle volte, posso aggirare questi forzando il feed principale di NuGet.org:

dnu restore;
dnu restore -s https://nuget.org/api/v2

Ecco il mio lavoro config.json:

{
"dependencies": {
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc2-*",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc2-*",
    "Microsoft.AspNet.Hosting": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http.Abstractions": "1.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Core": "6.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Razor": "6.0.0-rc2-*",
    "Microsoft.AspNet.Owin": "1.0.0-rc2-*",
    "Microsoft.AspNet.Routing": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-rc2-*",
    "Microsoft.AspNet.Session": "1.0.0-rc2-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc2-*",
    "EntityFramework.Commands": "7.0.0-rc2-*",
    "EntityFramework.Core": "7.0.0-rc2-*",
    "EntityFramework.InMemory": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc2-*",
    "EntityFramework.Relational": "7.0.0-rc2-*",
    "EntityFramework7.Npgsql": "3.1.0-beta8-2",
    "Microsoft.Extensions.Logging.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Framework.Configuration.CommandLine": "1.0.0-*",
    "Microsoft.Framework.Configuration.EnvironmentVariables": "1.0.0-*",
    "Microsoft.Framework.Configuration.Json": "1.0.0-*"
},
"commands": {
    "ef": "EntityFramework.Commands",
    "dev": "Microsoft.AspNet.Hosting --ASPNET_ENV Development --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    "dnxcore50": {}
}
}

L'elenco sopra riportato non proviene da config.json ma piuttosto da project.json ma ho comunque effettuato l'upgrade perché l'elenco mi ha fornito utili dipendenze che non conoscevo in precedenza.
Ron C,

1

Avevo problemi di dipendenza anche con il tentativo di placare i riferimenti dnxcore50 e dnx451.

Se capisco questo giusto "dipendenze": {} sono condivise tra i framework.

Quindi "dipendenze": {} all'interno dei "quadri": sono specifici per quel quadro.

dnxcore50 è un runtime modulare (autonomo), quindi fondamentalmente contiene tutti i runtime principali necessari per eseguire un programma a differenza del classico framework .net in cui si hanno dipendenze core sparse altrove.

Quindi, detto questo, volevo attenermi all'approccio minimale in caso decisi di ospitare su Mac o Linux ad un certo punto.

Aggiornare riguardato strani problemi di dipendenza con le viste cshtml, per ora sono andato con dnx451.

Questo è il mio project.json

{
"webroot": "wwwroot",
"version": "1.0.0-*",

"dependencies": {
    "System.Runtime": "4.0.10",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Mvc": "6.0.0-beta4",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta6-12075",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6-12457",
    "Microsoft.Framework.DependencyInjection": "1.0.0-beta4",
    "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta5"
 },

"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://admin.heartlegacylocal.com"  },

"frameworks": {
"dnx451": { }
 }
},

"publishExclude": [
"node_modules",
"bower_components",
"**.xproj",
"**.user",
"**.vspscc"
],
"exclude": [
  "wwwroot",
  "node_modules",
  "bower_components"
  ]
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.