Solution de recentrage from.Net 4.0 à 4.5 - comment recibler les paquets NuGet?

j'ai migré une solution qui cible actuellement .NET 4.0 dans VS2010 à VS2012 et maintenant je voudrais le re-cibler à .net 4.5

ce dont je ne suis pas sûr, ce sont les paquets NuGet. Par exemple EF5, que j'ai mis à jour à partir de EF4 dans VS2010 s'avère être en fait EF 4.4 comme vous pouvez le voir ici:

    <Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..packagesEntityFramework.5.0.0libnet40EntityFramework.dll</HintPath>
    </Reference>

je peux aussi voir ce qui suit dans les paquets.config pour le projet:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0" targetFramework="net40" />
</packages>

donc ma question Est:

Quelle est la meilleure pratique pour re-cibler tous les paquets NuGet qui sont actuellement positionnés à target .net 4.0 à target .NET 4.5?

188
demandé sur Ivan Zlatev 2012-08-17 17:42:36

4 réponses

NuGet 2.1 offre une fonctionnalité qui rend cela beaucoup plus simple: il suffit de faire update-package -reinstall -ignoreDependencies à partir de la Console du Gestionnaire de paquets.

NuGet 2.0 ne gère pas très bien le re-ciblage de vos applications. Afin de changer les cadres de cible de vos paquets, vous devez désinstaller et réinstaller les paquets (en prenant note des paquets que vous avez installés pour pouvoir réinstaller chacun d'eux).

le la raison pour laquelle les paquets doivent être désinstallés et réinstallés est:

  • lors de l'installation d'un paquet, nous déterminons le cadre cible de votre projet
  • ensuite, nous associons cela avec le contenu du paquet, en trouvant le \lib\ folder approprié (et le \content\ folder)
  • les références D'assemblage sont ajoutées avec des chemins D'indication qui pointent vers le dossier \lib\ du paquet, avec le sous-dossier droit (\lib\net40 par exemple)
  • les fichiers de contenu sont copiés à partir du dossier packages \content\ folder, avec le sous-dossier droit (\content\net40 par exemple)
  • nous enregistrons le cadre de cible utilisé pour installer le paquet dans les paquets.fichier de configuration
  • après avoir modifié le cadre cible de votre projet, les chemins D'accès pointent toujours vers net40
  • lorsque vous désinstallez des paquets, nous vérifions le cadre de Target qui a été enregistré dans les paquets.config pour voir quoi cible du cadre de libs/contenu de supprimer à partir de votre projet
  • lorsque vous réinstallez le paquet, nous détectons votre cadre cible mis à jour et référencons /copions le bon libs / contenu
244
répondu Jeff Handley 2014-12-06 06:37:50

pour ceux qui ont eu des problèmes avec la commande update-package -reinstall <packagename> , pensez à l'exécuter avec le drapeau -ignoreDependencies , comme ceci:

update-package -reinstall <packagename> -ignoreDependencies

ce drapeau laissera vos dépendances de paquet tranquilles, sinon elles pourraient être mises à jour même si le paquet que vous vouliez initialement réinstaller conserve toujours sa version.

Plus d'infos ici .

37
répondu vpalmu 2016-03-15 18:08:05

après avoir essayé sans succès la réponse acceptée, j'aimerais suggérer une commande moins risquée:

Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies

pour plus d'informations: http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html

19
répondu Bo Sunesen 2016-07-14 07:00:51

alors que j'essayais de réinstaller la solution packages wide, j'ai rencontré une erreur de dépendance (malgré l'utilisation du drapeau -ignoreDependencies ), et tous les paquets .les fichiers de configuration pour chaque projet ont été supprimés. Dans VS2013, il semble que paquets.la config ne retourne pas sur le disque et n'est pas ré-ajoutée tant que toutes les dépendances/références mises à jour ne sont pas ré-attachées au projet.

dans mon cas, ce qui a fonctionné était de mettez à niveau chaque projet un à la fois en ajoutant la commande -ProjectName nom du projet à la commande update-package . Dans ce cas, les colis .la config est mise à jour à mesure que chaque projet est mis à jour.

peut ne pas être pratique pour les très grandes solutions, mais il semble un compromis raisonnable de continuer à profiter de la mise à niveau automatisée pour autant de projets que possible et d'isoler les problématiques sans avoir tous les paquet.config dans votre solution supprimée en cas d'échec.

3
répondu Craigology 2016-01-01 13:37:23