Kann jemand den Zweck dieser beiden in csproj-Datei (VS2017) erklären:
%Vor%Ich habe gerade von VS2015 migriert und kann jetzt meine Web-API nicht veröffentlichen, weil es aussieht, dass ich nur ein Zielframework verwenden sollte. Außerdem kann ich nicht mehrere RIDs angeben. All diese veränderten Dinge machen mich frustriert. Nichts funktioniert von Grund auf, sollte etwas immer wieder überwinden.
Ich möchte nur meine Web-API unter Windows entwickeln, xUnit-Tests hier ausführen und dann Web-API auf Linux (Ubuntu) Server ausführen. Was sollte ich in csproj in beide Parameter eingeben? Links mit guter Erklärung werden sehr geschätzt.
Update1
Ich habe Web API mit referenzierten .net Kernbibliotheken. Alles, was von VS2015 migriert wurde. Jetzt im Root-Projekt habe ich %Code%. Wenn ich über VS2017 publiziere, habe ich einen Fehler bekommen:
C: \ Programm Dateien \ dotnet \ sdk \ 1.0.3 \ Sdks \ Microsoft.NET.Sdk \ buildCrossTargeting \ Microsoft.NET.Sdk.targets (31,5): Fehler: Das Ziel 'Veröffentlichen' wird nicht unterstützt, ohne a anzugeben Zielrahmen. Das aktuelle Projekt zielt auf mehrere Rahmen, Bitte geben Sie das Framework für die veröffentlichte Anwendung an.
Aber ich habe Zielrahmen in veröffentlichen als <TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>
angegeben.
OK. Dann habe ich mein csproj mit netcoreapp1.1
wie unten vorgeschlagen aktualisiert.
Aber jetzt kann ich sogar keine App bauen, bekomme Fehler:
5 & gt; C: \ Programme (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.targets (92,5): Fehler: Die Assets-Datei '\ obj \ project.assets.json' tut dies nicht habe ein Ziel für '.NETCoreApp, Version = v1.1 / ubuntu.16.10-x64'. Dafür sorgen Sie haben dieses Projekt für TargetFramework = 'netcoreapp1.1' und RuntimeIdentifier = 'ubuntu.16.10-x64'.
Ich möchte nur mit VS2017 bei Windows 8.1 / Windows7 entwickeln und auf Ubuntu 16.10 bereitstellen. Was mache ich falsch?
Update2
Ich habe 8 Projekte in der Lösung. 3 davon sind xUnit-Tests. So haben wir 5 Projekte. 4 von diesen 5 sind Klassenbibliotheken und 1 ist meine Web-App. Alle 4 Klassenbibliotheken haben dies:
%Vor%Meine Web App:
%Vor%Wie veröffentliche ich meine Web-App?
<TargetFramework>
(oder <TargetFrameworks>
, wenn Sie mehrere Ziele haben möchten, z. B. net451
, ein oder mehrere netstandard1.x
usw.). Per <TargetFramework>
/ <TargetFrameworks>
entry wird ein Satz von Assemblies erstellt und in bin\Debug\<targetframeworkid>
) gefunden.
Dies ist nützlich, wenn Sie eine andere Bibliothek in .NET Core verwenden möchten (weil die verwendete Bibliothek nur mit vollem .NET Framework wie 4.5.1 funktioniert) oder diese Funktion aus .NET Core entfernen, da sie nicht unterstützt wird .
Es wird sowohl für das Erstellen als auch für das Wiederherstellen von NuGet verwendet. d. h., Sie können in einem .NET Core-Projekt keine net451
only-Bibliothek verwenden (z. B. netstandard 1.1
- Sie können jedoch netstandard1.1
in einem net451
-Projekt verwenden)
<RuntimeIdentifier>
/ <RuntimeIdentifiers>
auf der anderen Seite wird hauptsächlich für NuGet verwendet. Es teilt NuGet mit, welche Pakete Sie benötigen. Wenn Sie zum Beispiel Linux, Mac und Windows als Ziel haben, benötigen bestimmte Assemblies native Bibliotheken (z. B. Verschlüsselung. Unter Windows wird CryptoAPI verwendet, auf Linux und Mac benötigen Sie OpenSSL). Dies umfasst nicht verwaltete Dlls und * .so (Linux) -Dateien.
d. <RuntimeIdentifiers>win7-x64;win-7x86;ubuntu.16.10-x64</RuntimeIdentifiers>
erstellt Nuget-Wiederherstellungspakete für die Versionen win7 (x64 und x86) und x64 nur für ubuntu. Dies ist erforderlich, da Sie, wenn Sie an Windows arbeiten, diese nativen Bibliotheken ebenfalls herunterladen müssen, damit Sie sie mit dotnet publish
bereitstellen / packen können.
Hier ist ein kleiner Haken: Wenn Sie eine vollständige .NET Framework-Referenz in <TargetFramework>
oder <TargetFrameworks>
haben, müssen Sie eine einzelne <RuntimeIdentifier>
angeben (Singular, nicht Plural <RuntimeIdentifiers>
), sonst erhalten Sie ein Fehler.
Zum Beispiel:
%Vor%RID ist die Abkürzung für Runtime IDentifier. RIDs werden verwendet, um das Ziel zu identifizieren Betriebssysteme, bei denen eine Anwendung oder ein Asset (dh Assembly) werde rennen. Sie sehen so aus: "ubuntu.14.04-x64", "win7-x64", "osx.10.11-x64". Für die Pakete mit nativen Abhängigkeiten wird es Legen Sie fest, auf welchen Plattformen das Paket wiederhergestellt werden kann.
Mehr in Dokumentation
Ändern Sie zuerst die richtige RID von win7
bis win7-x64
oder win7-x86
. Als nächstes fügen Sie andere RID wie ubuntu hinzu. Zum Beispiel:
Zielrahmen sieht gut aus. Weitere Informationen finden Sie Dokumente
Tags und Links asp.net-core .net-core visual-studio-2017 asp.net-core-webapi