Lors de la mise à niveau d'un projet qui compile et fonctionne correctement sous .NET Core 1.0 ou 1.1, mettez à jour le framework cible vers .NET Core 2.0 (netcoreapp2.0
) provoque l'échec de la construction avec l'erreur suivante:
error NU1003: PackageTargetFallback and AssetTargetFallback cannot be used together. Remove PackageTargetFallback(deprecated) references from the project environment.
Quelle est la raison de cette erreur et comment peut-on résoudre le problème pour reconstruire le projet?
Dans .NET Core 1.0 et 1.1, il était nécessaire de définir PackageTargetFallback
pour référencer des packages dont on sait qu'ils fonctionnent sur .NET Core mais ne le prennent pas officiellement en charge - par exemple. Bibliothèques PCL ou bibliothèques construites pour l’ancien dotnet
framework moniker.
Pour cette raison, le projet (.csproj
, .fsproj
, ...) contiendra une ligne semblable à:
<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
Dans la plupart des cas, cette ligne peut simplement être supprimée et le projet doit être généré car .NET Core 2.0 définit déjà AssetTargetFallback
comme étant net461
- ce qui signifie que tout package NuGet compatible avec .NET Framework 4.6.1 ou version ultérieure peut être utilisé sans configuration supplémentaire.
Si cela introduit plus d'erreurs de construction/restauration, modifiez la ligne en:
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
La raison de ce changement est que PackageTargetFallback
est considéré comme obsolète et doit être remplacé par AssetTargetFallback
, qui se comporte légèrement différemment.
Le changement radical dans l'outillage est que netcoreapp2.0
et netstandard2.0
définit automatiquement AssetTargetFallback
, ce qui entre en conflit avec toute valeur PackageTargetFallback
définie dans le fichier de projet.