2015-03-05 2 views
29

Ich verwende Visual Studio 2015 CTP 6 unter Windows 8.1.Warum funktioniert das Hinzufügen einer Abhängigkeit in meinem Web-API (ASP.NET v5) -Projekt nicht vollständig?

Ich versuche, eine Web-API mit ASP.NET v5 zu schreiben, mit seinem neuen Projektdateiformat. Ich habe einen Verweis auf Noda Time v1.3.0 zu meiner project.json Datei hinzugefügt, und der Editor in Visual Studio nimmt es auf, aber der Build-Prozess schlägt fehl.

Repro Rezept direkt von Grund auf:

  • öffnen VS 2015 CTP 6
  • in einer neuen Lösung neues Projekt anlegen:
    • Wählen Sie ASP.NET Web Application Projekt Vorlage
    • Select "ASP.NET 5 Preview Web API" im Vorlagen-Dialogfeld
  • Bui ld das Projekt, nur um alles zu bestätigen ist
  • Öffnen Sie project.json, und in der (schlecht formatierte) "Abhängigkeiten" Abschnitt, fügen Sie eine zusätzliche Zeile am Anfang (um nicht ein Komma zu einer anderen Zeile hinzufügen):

    "NodaTime": "1.3.0", 
    
  • öffnen Controllers\ValuesController.cs
  • Bearbeiten der parameterlos Get() Methode, so dass der Körper:

    return DateTimeZoneProviders.Tzdb.Ids; 
    
    • DateTimeZoneProviders werden rote Squiggles haben, was vernünftig ist - wir haben noch keine using Direktive.
  • Setzen Sie den Cursor in DateTimeZoneProviders und schlug Ctrl +. - Sie sollten angeboten werden "using NodaTime;" als eine mögliche Korrektur ... so weiß Intellisense (und damit Roslyn) definitiv über die Abhängigkeit.
  • Akzeptieren Sie den Fix. Die Squiggles werden verschwinden - alles ist gut, oder?
  • Versuchen Sie, die Lösung zu erstellen: Sie sollten zwei Fehler erhalten, im Grunde angibt, dass die Abhängigkeit nicht gelöst wurde.

Im Explorer, wenn Sie in dem BugDemo Lösung Verzeichnis suchen, erhalten Sie ein artifacts\obj\BugDemo\Debug\ProjectRawReferences Verzeichnis mit „ASP.NET Core 5.0“ und „ASP.NET 5.0“ Verzeichnissen, von denen beide eine Menge von DLLs finden in ... aber nicht Noda Zeit.

Wenn Sie mit der rechten Maustaste auf das Projekt klicken und "Pakete wiederherstellen" wählen, wird das Problem nicht behoben.

Wenn ich das gleiche Projekt mit Projekt K bauen, ein kpm restorehat abholen Noda Zeit, und wenn Sie wie unten einen Abschnitt zu project.json hinzufügen, dann k web Werke und http://localhost:5001/api/values Besuch zeigt Ihnen alle TZDB Zeitzone IDs :

"commands": { 
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001" 
}, 

Also, was mache ich falsch? Oder ist es nur ein Fehler?

Antwort

25

Wenn Sie erstellen, überprüfen Sie die Spalte "Projekt" - es stellt fest, dass das Build, das fehlschlägt, ist "ASP.NET Core 5.0" (nicht "ASP.NET 5.0"). In der oberen linken Dropdown-Liste des Code-Editors können Sie verschiedene Ansichten auswählen. Wenn Sie "ASP.NET Core 5.0" auswählen, sehen Sie, dass der NodaTime-Namespace nicht definiert ist.

Es sieht so aus, als ob die neuen ASP.NET-Projektvorlagen mehrere zielgerichtete Anwendungen erstellen, sowohl aspnet50 als auch aspnetcore50.

ASP.NET 5.0 basiert (derzeit) auf .NET 4.5.x, sodass das NodaTime portable (net4) diese Plattform erfüllt. ASP.NET Core 5.0 basiert auf dem neuen CoreClr (aspnetcore50), und es gibt keine Binaries in der NodaTime-Bibliothek, die dies unterstützen.

zu beheben, können Sie nur Unterstützung in Ihrer Anwendung für CoreCLR fallen durch die „aspnetcore50“ im project.json unter „Rahmen“ zu entfernen:

"frameworks": { 
    "aspnet50": { } 
    //"aspnetcore50": { } 
}, 

Jetzt ist Ihre App sollte bauen nur Targeting ASP.NET 5.0 und nicht der CoreClr.

+0

Also sagen Sie, dass bestehende "Portable" -Bibliotheken nicht Core-kompatibel sind und für Core neu gebaut werden müssen? – Nate

+0

@Nate: Die PCL/CoreClr-Dynamik wird noch entschieden. Das ist zu diesem Zeitpunkt nicht möglich. SO VIEL ICH WEISS. :) * Derzeit * ist es nicht möglich, in VS eine CoreClr-kompatible PCL zu erstellen. –

+0

Fantastisch, danke. Werde es versuchen, sobald ich nach Hause komme. Überrascht sah ich das gleiche mit Json.NET - ich würde von MS erwarten, dass das funktioniert. Will überprüfen, dass das nicht nur Benutzerfehler war ... –

Verwandte Themen