.NET Core RuntimeIdentifier vs TargetFramework
Kann sich das jemand erklären der Zweck dieser zwei csproj-Datei (VS2017):
<TargetFramework>netstandard1.6</TargetFramework>
<RuntimeIdentifier>win7</RuntimeIdentifier>
Ich nur migriert von VS2015 und kann nun nicht mehr mit der Veröffentlichung meines web-api, weil es aussieht sollte ich verwenden nur ein Ziel-framework. Außerdem kann ich nicht angeben, mehrere Befreit.
Alle diese veränderten Dinge machen mich frustriert. Nichts funktioniert von Grund auf, überwinden sollte etwas über und über.
Ich möchte nur die Entwicklung meiner web-api auf windows laufen xUnit-tests hier und dann deploy-web-api auf linux laufen (ubuntu) server.
Was sollte ich in beiden Parametern im csproj ?
Links mit guten Erklärungen sehr geschätzt.
Update1
Habe ich die web-api verwiesen .net-core-Bibliotheken. Alles, wo migriert von VS2015. Jetzt im root-Projekt, an dem ich
<TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>
. Wenn ich veröffentlichen über VS2017 ich erhielt den Fehler:
C:\Program
Dateien\dotnet\sdk\1.0.3\Sdks\Microsoft.NET.Sdk\buildCrossTargeting\Microsoft.NET.Sdk.Ziele(31,5):
Fehler : Die 'Veröffentlichen' - Ziel wird nicht unterstützt, ohne Angabe einer
Ziel-framework. Das aktuelle Projekt zielt auf mehrere frameworks,
bitte geben Sie den Rahmen für die veröffentlichte Anwendung.
Aber ich habe die angegebene Ziel-framework in der publizieren-als netcoreapp1.1
.
OK. Dann habe ich aktualisiert meine csproj mit <PropertyGroup Condition="$(TargetFramework)'=='netcoreapp1.1'">
wie unten vorgeschlagen.
<RuntimeIdentifier>ubuntu.16.10-x64</RuntimeIdentifier>
</PropertyGroup>
Aber jetzt habe ich noch nicht bauen-app, die Fehlermeldung:
5>C:\Program Files (x86)\Microsoft Visual
Studio\2017\Enterprise\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.Ziele(92,5):
Fehler : Die Datei '\obj\Projekt.Vermögenswerte.json' nicht
haben Sie ein Ziel für '.NETCoreApp,Version=v1.1/ubuntu.16.10-x64'. Sicher
Sie haben wieder dieses Projekt für die TargetFramework='netcoreapp1.1' und
RuntimeIdentifier='ubuntu.16.10-x64'.
Ich will nur entwickeln, mit VS2017 bei windows 8.1/windows7 und bereitstellen von ubuntu 16.10.
Was mache ich falsch ?
Update2
Habe ich 8 Projekte in Lösung. 3 von Ihnen sind xUnit-tests. Somit haben wir 5 Projekte. 4 dieser 5 sind Klassenbibliotheken und 1 ist meine web-app.
Alle 4 Klassen-Bibliotheken haben diese:
<TargetFrameworks>netstandard1.6;net461</TargetFrameworks>
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
Meine web-app:
<TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
So veröffentlichen Sie meine web-app ?
InformationsquelleAutor Alezis | 2017-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
<TargetFramework>
(oder<TargetFrameworks>
wenn Sie wollen, haben Sie mehrere Ziele, wienet451
eine oder mehrerenetstandard1.x
etc). Pro<TargetFramework>
/<TargetFrameworks>
Eintrag einen Satz von Assemblys erstellt werden und befindet sich im innerenbin\Debug\<targetframeworkid>
).Dies ist nützlich, wenn Sie verwenden möchten, eine andere Bibliothek .NET Core (weil die Bibliothek, die Sie verwendet, funktioniert nur mit voll .NET Framework, wie 4.5.1) oder entfernen dieses feature aus also .NET Core, weil es nicht unterstützt.
Es ist für beide, Gebäude und NuGet restore. d.h. Sie können nicht mit einem
net451
einzige Bibliothek in einem .NET-Core-Projekt (netstandard 1.1
zum Beispiel - aber Sie könnennetstandard1.1
imnet451
Projekt)<RuntimeIdentifier>
/<RuntimeIdentifiers>
auf der anderen Seite ist für NuGet vor allem. Es erzählt NuGet-Pakete, die Sie benötigen. Zum Beispiel, wenn das Ziel Linux, Mac und Windows, bestimmte Baugruppen erfordern eine native Bibliotheken (wie z.B. Verschlüsselung. Auf windows-CryptoAPI verwendet werden, aber auf Linux und Mac müssen Sie OpenSSL). Dies umfasst non-managed-dlls und *.so (Linux) Dateien.d.h.
<RuntimeIdentifiers>win7-x64;win-7x86;ubuntu.16.10-x64</RuntimeIdentifiers>
machen nuget restore-Pakete für win7 (x64 und x86) Versionen und x64 nur für ubuntu. Dies ist erforderlich, da beim arbeiten unter windows müssen Sie diese herunterladen, native Bibliotheken zu so Sie bereitstellen/Verpacken Sie mitdotnet publish
.Hier einen kleinen Haken allerdings: Wenn Sie eine volle .NET Framework Referenz in
<TargetFramework>
oder<TargetFrameworks>
, dann müssen Sie eine einzelne<RuntimeIdentifier>
(singular, nicht plural<RuntimeIdentifiers>
), sonst erhalten Sie eine Fehlermeldung.Beispiel:
<TargetFrameworks>netstandard1.0;net451</TargetFrameworks>
ist überflüssig, wenn er mit .Net Standard. Sie benutzen viele veraltete PraktikenIch habe versucht, und es funktioniert nicht für mich. Siehe meine updates auf die Frage.
Lesen Sie die Nachricht 😉 Wenn du mehr als 1 Ziel hat, die Sie zu erzählen haben
dotnet publish
version zu veröffentlichen. docs.microsoft.com/en-us/dotnet/articles/core/tools/..., d.h.dotnet publish --runtime ubuntu.16.10-x64
. Auch innetstandard1.0;net451
dienet451
ist veraltet (seitnetstandard1.0
läuft .NET 4.5 und höher. Aber wenn Sie die Funktionen nutzen, nur in 1.3 (.NET 4.6), dannnetstandard1.3;net451
kann verwendet werden, um zwei builds. Siehe docs.microsoft.com/en-us/dotnet/articles/standard/libraryDanke für deine Hilfe, aber es funktioniert auch nicht. Ich Laufe
dotnet publish --runtime ubuntu.16.10-x64
und bekomme den gleichen Fehler. Auch als ich sagte, dass meine root-app (web-app) Zielenetcoreapp1.1;net461
. Ich glaube nicht, verwendennet451
nur 3 Elementenetcoreapp1.1
net461
netstandard1.6
alle meine 5 Projekte.Nicht besser, nur verwenden
netstandard1.6
und danndotnet publish -c release -r ubuntu.16.10-x64
?InformationsquelleAutor Tseng
Mehr in docs
Ersten wechseln und korrektes ENTFERNEN von
win7
zuwin7-x64
oderwin7-x86
. Als Nächstes fügen Sie andere BEFREIEN, wie ubuntu. Zum Beispiel:Ziel-framework sieht gut aus. Für mehr Lesen docs
InformationsquelleAutor J. Doe