.NET Core RuntimeIdentifier und TargetFramework

10

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?

    
Alezis 20.04.2017, 12:34
quelle

2 Antworten

6

<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%     
Tseng 20.04.2017 12:49
quelle
0
  

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:

%Vor%

Zielrahmen sieht gut aus. Weitere Informationen finden Sie Dokumente

    
J. Doe 20.04.2017 12:40
quelle