Вам потрібно вручну відредагувати файл проекту та додати s до TargetFramework за замовчуванням і в основному змінити його на TargetFrameworks . Потім ви згадуєте Монікер з символом ; сепаратор.
Також ви можете помістити посилання на пакети Nuget в умовну групу ItemGroup вручну або за допомогою VS Nuget Package Manager.
Ось як повинен виглядати ваш .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>
Ще одне обхідне рішення, яке я роблю в наші дні через відсутність документації, полягає в тому, що я створюю проект у VS2015 і формую project.json, використовуючи наявну документацію та intellisense, потім відкриваю рішення у VS2017 та використовую вбудоване оновлення. Потім я розгляну файл csproj, щоб з’ясувати, як зробити цю конфігурацію.
Багатоцільове націлювання на більш езотеричні цілі без прізвиська :
Microsoft:
PCL не рекомендується +
Хоча PCL підтримуються, натомість автори пакунків повинні підтримувати netstandard. .NET Platform Standard - це еволюція PCL і представляє двійкову портативність на платформах, використовуючи єдиний псевдонім, який не прив’язаний до статичних, таких як портативні a + b + c монікери.
Якщо ви хочете призначатися Портативний профіль не має зумовлений прізвиська так портативні профілі також не може робити висновок TargetFrameworkIdentifier, TargetFrameworkVersionі TargetFrameworkProfile. Також константа компілятора не визначається автоматично. Нарешті, вам слід додати всі посилання на збірки, жодне з яких не надано за замовчуванням.
Цей приклад нижче взятий з проекту, який використовував dynamicключове слово, тому йому додатково потрібна була Microsoft.CSharpзбірка, таким чином, ви можете бачити, як це посилання на різні цілі.
<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>