Musisz ręcznie edytować plik projektu i dodać s do domyślnego TargetFramework i zasadniczo zmienić go na TargetFrameworks . Następnie wspominasz o Monikerze z ; separator.
Możesz również umieścić odwołania do pakietów Nuget w warunkowej ItemGroup ręcznie lub za pomocą Menedżera pakietów VS Nuget.
Oto jak powinien wyglądać plik .csproj:
<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>
Innym obejściem, które robię w dzisiejszych czasach z powodu brakującej dokumentacji, jest utworzenie projektu w VS2015 i utworzenie pliku project.json przy użyciu dostępnej dokumentacji i funkcji Intellisense, a następnie otwarcie rozwiązania w VS2017 i skorzystanie z wbudowanej aktualizacji. Następnie przyjrzę się plikowi csproj, aby dowiedzieć się, jak wykonać tę konfigurację.
Wielokrotne kierowanie na bardziej ezoteryczne cele bez monikera :
Microsoft:
PCL nie są zalecane +
Chociaż PCL są obsługiwane, autorzy pakietów powinni zamiast tego obsługiwać netstandard. Platforma .NET Platform Standard to ewolucja języków PCL i reprezentuje przenośność plików binarnych między platformami przy użyciu pojedynczego monikera, który nie jest powiązany ze statycznym, takim jak monikery portable-a + b + c.
Jeśli chcesz kierować Portable profilu nie ma predefiniowany przydomek też nie można wywnioskować więc przenośne profili TargetFrameworkIdentifier
, TargetFrameworkVersion
oraz TargetFrameworkProfile
. Również stała kompilatora nie jest definiowana automatycznie. Na koniec musisz dodać wszystkie odwołania do zestawów, żadne nie są domyślnie dostarczane.
Poniższy przykład pochodzi z projektu, w którym użyto dynamic
słowa kluczowego, więc dodatkowo potrzebował Microsoft.CSharp
zestawu, dzięki czemu można zobaczyć, jak to odwołania do różnych celów.
<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>