È 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
, TargetFrameworkVersion
e 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 dynamic
parola chiave, quindi necessitava inoltre Microsoft.CSharp
dell'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>