Wie kann ich fehlende Abhängigkeiten (oder andere Loader-Fehler) in dnx diagnostizieren?


133

Ich versuche, eine modifizierte Version des HelloWeb-Beispiels für ASP.NET vNext unter DNX mit Kestrel auszuführen. Ich verstehe, dass dies sehr auf dem neuesten Stand ist, aber ich würde hoffen, dass das ASP.NET-Team zumindest die einfachste Web-App zum Laufen bringt :)

Umgebung:

  • Linux (Ubuntu, so ziemlich)
  • Mono 3.12.1
  • DNX 1.0.0-beta4-11257 (ich habe auch 11249 verfügbar)

"Web App" Code, in Startup.cs:

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

Projektkonfiguration, 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 scheint gut zu funktionieren.

Wenn ich jedoch versuche zu laufen, wird eine Ausnahme angezeigt, Microsoft.Framework.Runtime.IApplicationEnvironmentdie darauf hinweist, dass sie nicht gefunden werden kann. Kommandozeile und Fehler (etwas neu formatiert)

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

Mein dringendstes Bedürfnis ist es natürlich, dies zu beheben. Ich würde mich auch über Ratschläge freuen, wie ich vorgehen kann, um zu diagnostizieren, was falsch läuft, damit ich ähnliche Probleme in Zukunft selbst beheben kann. (Das wird diese Frage wahrscheinlich auch für andere nützlicher machen.)

Ich habe Microsoft.Framework.Runtime.IApplicationEnvironmentin der Microsoft.Framework.Runtime.InterfacesAssembly-Quelle gefunden , und das scheint sich in letzter Zeit nicht geändert zu haben. Es ist nicht klar, warum die Ausnahme den Namen so anzeigt, als wäre es eine ganze Baugruppe an sich und nicht nur eine Schnittstelle innerhalb einer anderen Baugruppe. Ich vermute , dies kann zu fällig Montag neutral Schnittstellen , aber es ist von dem Fehler nicht klar. ( [AssemblyNeutral]ist tot, das ist es also nicht ... )


Wollten Sie aus Neugier einen Link zu github.com/aspnet/Home/wiki/Assembly-Neutral-Interfaces für Ihren Link zu neutralen Schnittstellen oder woanders? Da es derzeit kaputt ist
cgijbels

@cgijbels: Danke - ich wollte eigentlich auf davidfowl.com/assembly-neutral-interfaces verlinken, aber Ihr Link ist wahrscheinlich besser ...
Jon Skeet

Die neutralen Schnittstellen der @ JonSkeet-Assembly sind jetzt weg.
Tugberk

@ Tugberk: Meine Güte, wirklich? Das ist interessant - haben Sie einen Link, den ich in eine Bearbeitung aufnehmen könnte?
Jon Skeet

Antworten:


144

Gute Frage. Für Ihr spezifisches Problem sieht es so aus, als ob Ihre aufgelösten Abhängigkeiten nicht übereinstimmen. Wenn solche Dinge passieren, liegt es wahrscheinlich daran, dass Sie Ihre Anwendung auf einem inkompatiblen DNX ausführen. Wir nehmen immer noch große Änderungen vor. Wenn Sie also jemals feststellen , dass eine Methode vom Typ fehlt, werden Sie wahrscheinlich betaXPakete und betaYdnx ausführen oder umgekehrt.

Insbesondere wurden Assembly Neutral Interfaces in Beta4 entfernt, aber es sieht so aus, als ob die Anwendung, die Sie ausführen, sie noch verwendet.

Wir haben vor, dies so zu gestalten, dass Pakete den Mindest-DNX markieren können, den sie ausführen müssen, um die Fehlermeldung deutlicher zu machen. Auch im Laufe der Zeit werden die brechenden Veränderungen nachlassen.

Im Allgemeinen ist es jedoch an der Zeit, einen Leitfaden zur Diagnose solcher Probleme bei der Verwendung von dnx zu schreiben (da dies ziemlich anders ist als bei vorhandenem .NET).

Abhängigkeiten, die Sie eingeben, project.jsonsind nur oberste Ebene. Versionen sind auch immer Mindestversionen (es ist wie bei einem NuGet-Paket). Dies bedeutet, dass Sie bei der Angabe Foo 1.0.0-beta4wirklich angeben Foo >= 1.0.0-beta4. Dies bedeutet, wenn Sie nachfragen MVC 0.0.1und die Mindestversion für Ihren konfigurierten Feed ist MVC 3.0.0, erhalten Sie diese. Wir veröffentlichen Ihre Version auch NIEMALS , es sei denn, Sie geben sie an. Wenn Sie nach 1.0.0 fragen und es existiert, erhalten Sie 1.0.0, auch wenn neuere Versionen existieren. Die Angabe leerer Versionen ist IMMER schlecht und wird in späteren Builds nicht zugelassen.

Es gibt eine neue Funktion, die wir in Nuget einführen: Floating-Versionen. Heute funktioniert es nur mit dem Prerelease-Tag, in der nächsten Version jedoch mit mehr Teilen der Version. Dies ähnelt der npm- und gem-Syntax zum Angeben von Versionsbereichen in der Paketspezifikationsdatei.

1.0.0-*- Bedeutet, dass ich die HÖCHSTE Version habe, die mit dem Präfix übereinstimmt (gemäß den Regeln für die semantische Versionierung ) ODER wenn es keine Version gibt, die mit diesem Präfix übereinstimmt, verwenden Sie normales Verhalten und erhalten Sie die NIEDRIGSTE Version> = die angegebene Version.

Wenn Sie die Wiederherstellung in den neuesten Builds ausführen, wird eine Datei namens aufgerufen project.lock.json. Diese Datei hat den transitiven Abschluss von Abhängigkeiten für alle in definierten Ziel-Frameworks project.json.

Wenn so etwas fehlschlägt, können Sie Folgendes tun:

Schauen Sie sich die aufgelösten Abhängigkeiten mit an kpm list. Dies zeigt Ihnen die aufgelösten Versionen von Paketen, auf die Ihr Projekt verweist, und welche Abhängigkeit es ausgelöst hat. Wenn beispielsweise A -> B angezeigt wird, wird Folgendes angezeigt:

EIN
  -> B.
B.
 ->

Tatsächliche Ausgabe der KPM-Liste:

Auflisten von Abhängigkeiten für ClassLibrary39 (C: \ Benutzer \ davifowl \ Dokumente \ Visual Studio 14 \ Projekte \ 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

* bedeutet direkte Abhängigkeit.

Wenn Sie ein funktionierendes visuelles Studio haben (das derzeit mit DNX bricht), können Sie sich den Referenzknoten ansehen. Es hat die gleichen Daten visuell dargestellt:

Referenzknoten

Schauen wir uns an, wie ein Abhängigkeitsfehler aussieht:

Hier ist die 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.0existiert nicht. Das Ausführen der kpm-Wiederherstellung zeigt also Folgendes:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie diagnostizieren, wann die Wiederherstellung möglicherweise fehlgeschlagen ist, sehen Sie sich die gestellten HTTP-Anforderungen an. Dort erfahren Sie, in welchen konfigurierten Paketquellen kpm gesucht hat. Beachten Sie, dass im obigen Bild eine CACHEAnforderung vorliegt. Dies ist das integrierte Caching, das auf dem Ressourcentyp (nupkg oder nuspec) basiert und über eine konfigurierbare TTL verfügt (siehe kpm restore --help). Wenn Sie kpmdas Aufrufen der Remote-NuGet-Quellen erzwingen möchten , verwenden Sie das folgende --no-cacheFlag:

KPM-Wiederherstellung - kein Cache

Diese Fehler werden auch in Visual Studio im Protokollausgabefenster des Paketmanagers angezeigt:

Geben Sie hier die Bildbeschreibung ein

Randnotiz!

Paketquellen

Ich werde beschreiben, wie NuGet.config jetzt funktioniert (was sich wahrscheinlich in Zukunft ändern wird). Standardmäßig haben Sie eine NuGet.config mit der standardmäßig global konfigurierten NuGet.org-Quelle in %appdata%\NuGet\NuGet.Config. Sie können diese globalen Quellen in Visual Studio oder mit dem NuGet-Befehlszeilentool verwalten. Sie sollten immer Ihre effektiven Quellen (die in der kpm-Ausgabe aufgeführten) betrachten, wenn Sie versuchen, Fehler zu diagnostizieren.

Lesen Sie hier mehr über NuGet.config

Zurück zur Realität:

Wenn Abhängigkeiten nicht gelöst sind, erhalten Sie beim Ausführen der Anwendung Folgendes:

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

Die Laufzeit versucht grundsätzlich zu überprüfen, ob das gesamte Abhängigkeitsdiagramm aufgelöst ist, bevor versucht wird, es auszuführen. Wenn es vorgeschlagen wird, ausgeführt zu werden, liegt kpm restorees daran, dass die aufgelisteten Abhängigkeiten nicht gefunden werden können.

Ein weiterer Grund, warum Sie diesen Fehler erhalten könnten, ist, wenn Sie die falsche dnx-Variante ausführen. Wenn Ihre Anwendung nur dnx451 angibt und Sie versuchen, den CoreCLR-dnx auszuführen, tritt möglicherweise ein ähnliches Problem auf. Achten Sie in der Fehlermeldung genau auf das Ziel-Framework:

Zum Laufen:

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

Wenn Sie versuchen zu laufen, sollten Sie sich daran erinnern, dass die mentale Zuordnung von clr zum Zielframework in Ihrem definiert ist project.json.

Dies wird auch in Visual Studio unter dem Referenzknoten angezeigt: Ungelöste Abhängigkeiten

Die als gelb markierten Knoten sind nicht aufgelöst.

Diese werden auch in der Fehlerliste angezeigt:

Fehlerliste ungelöste Abhängigkeiten

Gebäude

Diese Fehler treten auch beim Erstellen auf. Beim Erstellen über die Befehlszeile ist die Ausgabe sehr ausführlich und kann bei der Diagnose von Problemen äußerst nützlich sein:

> 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

Die Ausgabe zeigt alle Assemblys, die aus Paketen und Projektreferenzen an den Compiler übergeben wurden. Wenn Sie Build-Fehler erhalten, sollten Sie hier nachsehen, ob das von Ihnen verwendete Paket tatsächlich auf dieser Zielplattform funktioniert.

Hier ist ein Beispiel für ein Paket, das unter dnxcore50 nicht funktioniert:

{
    "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 Version 3.0.0 enthält keine Assemblys, die auf dnxcore50 ausgeführt werden (siehe lib-Ordner des entpackten Pakets). Wenn wir rennen kpm build:

Fehlende Assemblys auf dnxcore50

Beachten Sie, dass dort "using Package Microsoft.Owin.Host.SystemWeb" steht, aber nicht "File:". Dies könnte der Grund für einen Buildfehler sein.

Hier endet mein Brain Dump


Ich versuche, die von Ihnen vorgeschlagene dnu-Liste zu verwenden, um festzustellen, warum dnx eine Abhängigkeit nicht auflösen kann. Aber ich bekomme ein rotes "Projekt.json kann nicht gefunden werden". Die Assembly befindet sich im Artefaktordner und wird durch Aktivieren von "Ausgaben beim Erstellen erstellen" generiert. Irgendwelche Vorschläge, wie es weitergehen soll?
Mike Scott

Was hat der Artefaktordner mit irgendetwas zu tun? Haben Sie auf die Abhängigkeit in project.json verwiesen? Ist das Paket, auf das Sie verweisen, in einem konfigurierten Feed verfügbar?
Davidfowl

17

Ich weiß immer noch nicht ganz, was los war, aber ich habe jetzt eine Reihe von Schritten, um es zumindest einfacher zu machen, Dinge auszuprobieren:

  • Installieren Sie im Zweifelsfall dnx neu
    • Das Wegblasen des Paketcaches kann hilfreich sein
  • Stellen ~/.config/NuGet.configSie sicher, dass Sie die richtigen NuGet-Feeds verwenden

Am Ende habe ich die folgende Befehlszeile verwendet, um verschiedene Optionen auf einigermaßen saubere Weise zu testen:

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

Es sieht so aus, als ob mein Problem wirklich auf die falschen Versionen der installierten Abhängigkeiten zurückzuführen ist. Eine Versionsnummer von "1.0.0-beta4"ist anscheinend ganz anders als "1.0.0-beta4-*". Beispielsweise hat die KestrelAbhängigkeit Version 1.0.0-beta4-11185 installiert, wenn sie nur als angegeben wurde 1.0.0-beta4, aber Version 1.0.0-beta4-11262 mit der -*am Ende. Ich wollte beta4explizit angeben , um zu vermeiden, dass versehentlich ein Beta3-Build mit dem verwendet wird

Die folgende Projektkonfiguration funktioniert einwandfrei:

{
  "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
Dies liegt daran, dass Sie -*immer die neueste Vorabversion erhalten, während Sie ohne diese Version die niedrigste Version erhalten, die alle Abhängigkeiten erfüllt (wie bei NuGet üblich). Dieser Test hat einige Beispiele.
Alexander Köplinger

2
@ AlexanderKöplinger: Danke, das macht Sinn. Also ... Beta4 ist die früheste Beta4, während ... Beta4- * die neueste Beta4 ist, oder?
Jon Skeet

4
"frameworks": {"dnx451": {}}Hatte es für mich dnxcore50
repariert

Ihr erster Befehl hat mir auch geholfen, nicht mehr an der Beta5-Version festzuhalten. Ich habe versucht zu laufen dnvm upgrade-self, dies würde nicht auf die neueste Version aktualisieren. Das Ausführen der VS-Eingabeaufforderung als Administrator zeigte die dnvm-Version als an rc1..., jedoch nicht als Administrator beta5.... Nach Ihrem Befehl wurden sowohl die Eingabeaufforderungen für Administratoren als auch für Nicht-Administratoren als rc2...(neueste) Version angezeigt .
JabberwockyDecompiler

Für diejenigen, die Mono verwenden und sich fragen, ob sie diese Antwort wählen sollen dnx451oder nicht dnxcore50, hat mir geholfen, dieses Thema ein bisschen besser zu verstehen: stackoverflow.com/a/30846048/89590 Kurze Antwort: dnx451ist für Mono geeignet.
Nate Cook

8

Sie können ein env var gesetzt genannt , DNX_TRACEum 1eine Tonne mehr diagnostische Informationen zu sehen. Seien Sie gewarnt, es gibt viel mehr Infos!


@ JonSkeet Übrigens enthalten die anderen Antworten (einschließlich Ihrer Selbstantwort) großartige Informationen zur Diagnose und Reparatur des spezifischen Problems, auf das Sie gestoßen sind. Ich habe diese Antwort sehr kurz gehalten, weil es nur eine andere Antwort ist, die zu weiteren Hinweisen führen könnte, warum das Problem überhaupt aufgetreten ist.
Eilon

Absolut - das weiß ich zu schätzen :)
Jon Skeet

3

Damit es funktioniert, habe ich mein project.json.. geändert . Es sieht jetzt so aus:

{
"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": {
    }
}

Der Schlüssel schien der Framework-Bereich zu sein.

Auch die Umbenennung hat geändert, wie es k webfunktioniert, so dass es jetzt dnx . weboderdnx . kestrel

Update - etwas mehr Infos

Seltsamerweise bekam ich, nachdem ich ohne definierte Frameworks gelaufen war, ein paar zusätzliche Dinge, als ich das tat 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

.. dann lief es gut. Dann habe ich wieder in den Framework-Bereich gewechselt

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

.. und es hat immer noch funktioniert, während es vorher einen Fehler auslösen würde!

Sehr komisch!

(Ich renne 1.0.0-beta4-11257)

Weiteres Update

Ich fuhr eine neue Ubuntu - Instanz auf und bekam den gleichen Fehler wie Sie .. Mein Gedanke war , dass das Problem , indem sie es nur verursacht werden versuchen , Pakete von zu bekommen nuget.orgund nicht myget.org(was die neueren Dinge hat) , so dass ich in einem fiel NuGet.Configin die Wurzel des Projekts ..

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

.. das scheint es für mich behoben zu haben, indem ich die richtigen Versionen (nacheinander kpm restore) bekomme .


1
Bezüglich des Teils "dnx. Kestrel" - in der Tat, daher der Befehl, den ich angezeigt habe :) Bei dieser Konfiguration wird ein anderer Fehler angezeigt: System.TypeLoadException: Typ 'Microsoft.Framework.DependencyInjection.LoggingServiceCollectionExtensions' konnte nicht aus Assembly 'Microsoft geladen werden. Framework.Logging, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null '. Welche DNX-Version verwenden Sie?
Jon Skeet

1
Als ich das erste Mal "dnx. Web" machte, bekam ich: `System.InvalidOperationException: Die folgenden Abhängigkeiten für das Zielframework 'DNX, Version = v4.5.1' konnten nicht aufgelöst werden, und es wurde eine Liste der fehlenden Dinge vorgeschlagen.
Stephen Pope

Interessant. Auf welcher Plattform ist das übrigens?
Jon Skeet

Haben Sie 'source ~ / .bashrc' ausgeführt, um die Umgebungsvariablen nach dem Upgrade von DNX neu zu laden? Außerdem musste ich "dnvm upgrade" + "dnvm use default" machen
Stephen Pope

DNX wurde nicht von .bashrc aktualisiert ... möglicherweise, weil ich es gestern manuell erstellt habe. Ich werde versuchen, stattdessen die aktualisierten Anweisungen zu verwenden ...
Jon Skeet

2

In diesen Tagen package.jsonenden alle meine Versionen in"-rc2-*"

(Nur Ausnahmen, die ich bisher gesehen habe, sind die Microsoft.Framework.ConfigurationPakete, die entweder "1.0.0-rc1-*"oder sein müssen "1.0.0-*")

In Bezug auf die "Versionszüge", die @davidfowl erwähnt, scheint zwischen Beta8 und RC2 eine Menge Schmerz verschwunden zu sein.

dnvm upgrade -u -arch x64 -r coreclr

Ich hatte das meiste Glück coreclrmit diesen 2 NuGet-Feeds:

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

Wenn ich zu tun haben Paket Probleme fehlen, 90% der Zeit ist es die gleichen Täter:

Newtonsoft.Json
Ix-Async
Remotion.Linq

Die meiste Zeit kann ich diese umgehen, indem ich den Haupt-Feed von NuGet.org erzwinge:

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

Hier ist meine Arbeitskonfiguration.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": {}
}
}

Die obige Liste stammt nicht von config.json, sondern von project.json, aber ich habe trotzdem upvoted, weil die Liste mir nützliche Abhängigkeiten lieferte, von denen ich vorher nichts wusste.
Ron C

1

Ich hatte auch Probleme mit der fehlenden Abhängigkeit beim Versuch, die Referenzen dnxcore50 und dnx451 zu beschwichtigen.

Wenn ich dieses Recht verstehe, werden "Abhängigkeiten": {} zwischen den Frameworks geteilt.

Dann sind "Abhängigkeiten": {} innerhalb der "Frameworks": spezifisch für dieses Framework.

dnxcore50 ist eine modulare Laufzeit (in sich geschlossen), die im Grunde alle Kernlaufzeiten enthält, die zum Ausführen eines Programms erforderlich sind, im Gegensatz zum klassischen .net-Framework, bei dem die Kernabhängigkeiten an anderer Stelle verstreut sind.

Nachdem dies gesagt war, wollte ich mich an den minimalen Ansatz halten, falls ich mich entschied, irgendwann auf Mac oder Linux zu hosten.

Update stieß auf seltsame Abhängigkeitsprobleme mit cshtml-Ansichten, ging erst einmal mit dnx451.

Das ist mein 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"
  ]
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.