Wenn .NET Core das project.json
Format noch verwendete , konnten Sie eine Klassenbibliothek erstellen erstellen, die auf mehrere Frameworks abzielt (z. B. net451, netcoreapp1.0).
csproj
Wie können Sie nun, da das offizielle Projektformat MSBuild verwendet, mehrere Frameworks für das Targeting angeben? Ich versuche , dies aus den Projekteinstellungen in VS2017 zu suchen, aber ich bin in der Lage, nur einen einzigen Rahmen von der .NET - Frameworks Core - Ziel (es nicht einmal die andere voll .NET Framework - Versionen auflistet , die ich tue installiert haben) ::
Antworten:
Sie müssen die Projektdatei manuell bearbeiten und s zum Standard- TargetFramework hinzufügen und es grundsätzlich in TargetFrameworks ändern . Dann erwähnen Sie den Moniker mit einem ;Separator.
Sie können die Nuget-Paketreferenzen auch manuell oder mithilfe von VS Nuget Package Manager in eine bedingte ItemGroup einfügen.
So sollte Ihre .csproj aussehen:
Eine andere Problemumgehung, die ich heutzutage aufgrund fehlender Dokumentation mache, besteht darin, dass ich ein Projekt in VS2015 erstelle und die Datei project.json mit der verfügbaren Dokumentation und Intellisense erstelle. Öffnen Sie dann die Lösung in VS2017 und verwenden Sie das integrierte Upgrade. Ich werde mir dann die csproj-Datei ansehen, um herauszufinden, wie diese Konfiguration durchgeführt werden kann.
Multi-Targeting von esoterischeren Zielen ohne Moniker :
Microsoft:
Wenn Sie auf ein tragbares Profil abzielen möchten, hat es keinen vordefinierten Spitznamen, sodass auch tragbare Profile nicht auf , und schließen
TargetFrameworkIdentifier
könnenTargetFrameworkVersion
TargetFrameworkProfile
. Auch eine Compilerkonstante wird nicht automatisch definiert. Schließlich müssen Sie alle Assemblyreferenzen hinzufügen, die standardmäßig nicht bereitgestellt werden.Das folgende Beispiel stammt aus einem Projekt, das das
dynamic
Schlüsselwort verwendet hat, sodass zusätzlich dieMicrosoft.CSharp
Assembly benötigt wurde. Sie können also sehen, wie die Referenzen für verschiedene Ziele sind.quelle
Sie können die
.csproj
Datei hierfür manuell bearbeiten und die EigenschaftTargetFrameworks
(nichtTargetFramework
) festlegen .Beispiel
EFCore.csproj
: https://github.com/aspnet/EntityFrameworkCore/blob/951e4826a38ad5499b9b3ec6645e47c825fa842a/src/EFCore/EFCore.csprojquelle
Dies ist nicht die gewünschte Projektvorlage, wenn Ihre Bibliothek auf mehreren Plattformzielen arbeiten muss. Mit dieser Projektvorlage kann Ihre Bibliothek immer nur in einem Projekt verwendet werden, das auf .NETCore abzielt. Der PCL-Bibliotheksansatz wurde eingestellt. Sie müssen jetzt einen .NETStandard auswählen.
Sie starten dazu das Projekt mit der Projektvorlage "Klassenbibliothek (.NET Standard)". Sie haben jetzt die Möglichkeit, die .NETStandard-Version auszuwählen. Das aktuelle Kompatibilitätsraster finden Sie hier .
Hoffentlich halten sie diesen verlinkten Artikel auf dem neuesten Stand. Dies ist im Fluss, .NETStandard 2.0 wurde festgenagelt, wird aber noch nicht ausgeliefert. Geplant für das zweite Quartal 2017, voraussichtlich Ende des Frühlings, werden derzeit 97% erreicht. Ich habe gehört, wie die Designer sagten, dass die Verwendung von 1.5 oder 1.6 nicht empfohlen wird, nicht kompatibel genug mit 2.0
quelle
project.json
Sie könnten bestimmte Abhängigkeiten für ein Zielframework angeben.Ich habe einen Anfängerleitfaden für Multi-Targeting-Net-Framework und Netcore erstellt, der mit dem einfachen 1-Zeilen-Fix beginnt und Sie dann durch die einzelnen Komplikationen führt.
Der einfachste Ansatz besteht darin, zuerst ein Netcore- oder Netstandard-Ziel zum Laufen zu bringen. Bearbeiten Sie dann die csproj-Datei und führen Sie diese Schritte für die anderen Ziele aus.
<Reference />s
for System. * DLLs für alle Netframework-Ziele, indem Sie einfach lesen, was in den Build-Fehlermeldungen fehlt.<PackageReference />s
in Fällen, in denen sie nicht für jedes Ziel gleich sind. Der einfachste Trick besteht darin, vorübergehend auf einzelne Ziele zurückzugreifen, damit die GUI die Nuget-Referenzen für Sie korrekt verarbeitet.quelle