2017-10-03 13 views
1

Ich bin ein bisschen verwirrend, wie .net-Standard 2 nuget Paket zwischen .net Kern und .net-Framework Anwendungen zu teilen. Zum Beispiel habe ich .net-standard 2.0 Paket mit nur <TargetFramework>netstandard2.0</TargetFramework> erstellt. So habe ich nur ../libs/netstandard2.0 Ordner im Paket. Kann ich es wie in .net-framework 4.6.1 installieren. Anwendung (nach compatibility matrix kann ich)? Oder sollte ich dieses Paket Multi Target <TargetFrameworks>netstandard2.0;net461</TargetFrameworks> machen? Welche Vorteile hier?Kann ich ein .NET Standard 2.0-Paket in einer klassischen .NET 4.6.1-Anwendung verwenden?

Antwort

2

Ja, tatsächlich. Sie können das .NET Standard 2.0-Paket nur innerhalb eines .NET Framework 4.6.1-Projekts referenzieren (eine Framework-Version niedriger wird nicht mit .NET Standard 2.0 funktionieren). Es ist nicht notwendig, separate Ziele oder Umbauten zu haben.

Lesen Sie auch Referencing .NET Standard Assemblies from both .NET Core and .NET Framework.

Über die Vorteile der Verwendung von Multi-Targeting: Es gibt keine, außer Sie müssen. Was kann so sein? Nach the documentation:

Möglicherweise müssen Sie ältere Versionen von .NET Framework als Ziel verwenden, wenn Ihr Projekt sowohl .NET Framework als auch .NET Core unterstützt. Verwenden Sie in diesem Szenario #if-Anweisungen in Ihrem Code, wenn Sie neuere APIs und Sprachkonstrukte für die neueren Ziele verwenden möchten. Möglicherweise müssen Sie auch für jede Plattform, auf die Sie ausgerichtet sind, unterschiedliche Pakete und Abhängigkeiten hinzufügen, um die verschiedenen APIs für jeden Fall einzubeziehen.

So würden Sie nur wirklich brauchen, wenn Sie Inkompatibilität in Code oder Referenzen haben. Wenn Sie dieses Problem nicht haben, brauchen Sie kein Multi-Targeting.

Es gibt eine Probe gegeben, wie Referenzen basierend auf dem Build-Ziel umfassen, die einen Einblick geben könnte:

<ItemGroup Condition="'$(TargetFramework)' == 'net40'"> 
    <Reference Include="System.Net" /> 
</ItemGroup> 
Verwandte Themen