È necessario modificare manualmente il file di progetto e aggiungere i messaggi di posta elettronica al TargetFramework predefinito e sostanzialmente cambiarlo in TargetFrameworks . Poi menzioni il Moniker con un ; separatore.
Inoltre è possibile inserire manualmente i riferimenti al pacchetto Nuget in un ItemGroup condizionale o utilizzando VS Nuget Package Manager.
Ecco come dovrebbe apparire il tuo .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>
Un'altra soluzione alternativa che faccio in questi giorni a causa della documentazione mancante è che creo un progetto in VS2015 e creo project.json utilizzando la documentazione disponibile e intellisense, quindi apro la soluzione in VS2017 e uso l'aggiornamento integrato. Esaminerò quindi il file csproj per capire come realizzare tale configurazione.
Multi-targeting bersagli più esoterici senza un Moniker :
Microsoft:
I PCL non sono consigliati +
Sebbene i PCL siano supportati, gli autori dei pacchetti dovrebbero invece supportare netstandard. .NET Platform Standard è un'evoluzione dei PCL e rappresenta la portabilità binaria tra piattaforme utilizzando un unico moniker che non è legato a uno statico come i moniker portable-a + b + c.
Se si desidera raggiungere un profilo portatile che non dispone di un predefinito moniker così Profili portatili anche non può dedurre TargetFrameworkIdentifier, TargetFrameworkVersione TargetFrameworkProfile. Inoltre, una costante del compilatore non viene definita automaticamente. Infine devi aggiungere tutti i riferimenti agli assembly, nessuno viene fornito per impostazione predefinita.
L'esempio di seguito è tratto da un progetto che utilizzava la dynamicparola chiave, quindi necessitava inoltre Microsoft.CSharpdell'assembly, quindi è possibile vedere come fa riferimento a destinazioni diverse.
<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>