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:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard1.6;net452</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net452'">
<PackageReference Include="Microsoft.Azure.DocumentDB">
<Version>1.12.0</Version>
</PackageReference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.6'">
<PackageReference Include="Microsoft.Azure.DocumentDB.Core">
<Version>1.1.0</Version>
</PackageReference>
</ItemGroup>
</Project>
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:
PCLs werden nicht empfohlen +
Obwohl PCLs unterstützt werden, sollten Paketautoren stattdessen netstandard unterstützen. Der .NET Platform Standard ist eine Weiterentwicklung von PCLs und stellt die binäre Portabilität über Plattformen hinweg dar, indem ein einzelner Moniker verwendet wird, der nicht an einen statischen wie tragbare a + b + c-Moniker gebunden ist.
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 die Microsoft.CSharp
Assembly benötigt wurde. Sie können also sehen, wie die Referenzen für verschiedene Ziele sind.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard1.5;net40;portable40-net45+sl5+win8+wp8</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)'=='portable40-net45+sl5+win8+wp8'">
<TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile158</TargetFrameworkProfile>
<DefineConstants>$(DefineConstants);PORTABLE158</DefineConstants>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)'=='netstandard1.5'">
<PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
<PackageReference Include="System.ComponentModel" Version="4.3.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net40'">
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='portable40-net45+sl5+win8+wp8'">
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows" />
</ItemGroup>
</Project>