Ответ 1
Вам необходимо вручную отредактировать файл проекта и добавить s к стандартному TargetFramework и изменить его на TargetFrameworks. Затем вы упоминаете Moniker с разделителем ;.
Также вы можете поместить ссылки на пакеты 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, чтобы выяснить, как выполнить эту настройку.
Многоцелевое нацеливание на более эзотерические цели без Moniker:
Microsoft:
PCL не являются recommended+
Хотя PCL поддерживаются, авторы пакетов должны поддерживать Нетстандарт вместо. Платформа .NET Standard - это эволюция PCL и представляет двоичную переносимость между платформами, используя один Моникер, который не привязан к статике, как, например, переносимые а + В + С.
Если вы хотите настроить таргетинг на переносной профиль, у него нет предопределенного названия, поэтому переносимые профили также не могут выводить 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>