2017-08-08 2 views
35

Lors de la mise à niveau d'un projet qui s'exécute correctement sur .NET Core 1.0 ou 1.1, la mise à jour de l'infrastructure cible vers .NET Core 2.0 (netcoreapp2.0) provoque la génération à l'échec avec l'erreur suivante:Mise à niveau vers .NET Core 2.0: PackageTargetFallback et AssetTargetFallback ne peuvent pas être utilisés ensemble

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-il être résolu de faire à nouveau la construction du projet?

Répondre

62

Dans .NET Core 1.0 et 1.1, il était nécessaire de définir PackageTargetFallback lors de la référence à des packages connus pour fonctionner sur .NET Core mais qui ne le prennent pas officiellement en charge, par exemple. Bibliothèques PCL ou bibliothèques créées pour l'ancien moniker de structure dotnet.

En raison de cela, 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 retiré et le projet devrait construire parce que. NET Core 2.0 définit déjà AssetTargetFallback comme 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 de construction/restauration des erreurs, modifiez la ligne:

<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érent.

Le changement de rupture dans l'outillage est que netcoreapp2.0 et netstandard2.0 définis automatiquement AssetTargetFallback qui est en conflit avec une valeur PackageTargetFallback définie dans le fichier de projet.

+7

Merci, j'ai ouvert le csproj dans l'éditeur et j'ai complètement supprimé l'élément comme vous l'avez suggéré et cela a très bien fonctionné. – amassani