63 votes

Mise à niveau vers .NET Core 2.0 : PackageTargetFallback et AssetTargetFallback ne peuvent pas être utilisés ensemble

Lors de la mise à niveau d'un projet qui se compile et s'exécute correctement avec .NET Core 1.0 ou 1.1, la mise à jour du cadre cible vers .NET Core 2.0 ( netcoreapp2.0 ) fait échouer 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 la résoudre pour que le projet soit à nouveau construit ?

114voto

Martin Ullrich Points 5894

Dans .NET Core 1.0 et 1.1, il était nécessaire de définir PackageTargetFallback lorsqu'il s'agit de référencer des paquets dont on sait qu'ils fonctionnent avec .NET Core mais qui ne le supportent pas officiellement, par exemple les bibliothèques PCL ou les bibliothèques construites pour l'ancienne version. dotnet moniker de cadre.

Pour cette raison, le projet ( .csproj , .fsproj , ...) contiendra une ligne similaire à :

<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>

Dans la plupart des cas, cette ligne peut être simplement supprimée. et le projet devrait se construire parce que .NET Core 2.0 définit déjà AssetTargetFallback à être net461 - Cela signifie que tout paquet NuGet compatible avec .NET Framework 4.6.1 ou plus peut être utilisé sans configuration supplémentaire.

Si cela introduit plus d'erreurs de construction/restauration, changez la ligne en :

<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

La raison de ce changement est que PackageTargetFallback est considéré comme déprécié et doit être remplacé par AssetTargetFallback qui se comporte de manière légèrement différente.

Le changement de rupture dans l'outillage est le suivant netcoreapp2.0 y netstandard2.0 automatiquement AssetTargetFallback qui entre en conflit avec tout PackageTargetFallback définie dans le fichier du projet.

12 votes

Merci, j'ai ouvert le csproj dans l'éditeur et supprimé entièrement l'élément <PackageTargetFallback> comme vous l'avez suggéré et cela a fonctionné parfaitement.

0 votes

Mais que faire s'il n'y a pas de PackageTargetFallback dans le fichier du projet ?

0 votes

@Dima pour que vous obteniez le message d'erreur dans la question sans aucun des éléments suivants PackageTargetFallback o AssetTargetFallback en cours de définition dans le projet ? Peut-être un fichier importé ? (par exemple Directory.Build.props dans la hiérarchie des dossiers). Pensez à ouvrir une question spécifique à ce sujet ou un problème GitHub quelque part. Un journal binaire ( dotnet restore /bl par exemple pour obtenir un msbuild.binlog ) aiderait à diagnostiquer

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X