2 votes

NuGet dans un environnement de sous-référentiel (externes)

J'ai quelques dépôts dans Mercurial avec la structure suivante :

  • Core
  • Integration
  • Admin
  • MyApp

À partir du dépôt MyApp, je veux inclure Core et Integration.

Je les ajoute en tant que sous-dépôt à MyApp, et les place à l'intérieur d'un dossier Externals.

La structure de dossier pour MyApp ressemble approximativement à ceci :

MyApp
- BusinessLogic
- DataAccess
- Externals
-- Core
-- Integration
- Web
- packages

Le problème a à voir avec le dossier packages. J'utilise la restauration des packages dans toutes les solutions, et NuGet télécharge tous les packages correctement. Le dossier contient les packages sur lesquels mes projets externes dépendent.

Le seul problème est que le chemin relatif de Core et Integration vers le dossier des packages est maintenant incorrect.

Y a-t-il un moyen de résoudre cela ?

2voto

Pavel Bakshy Points 3954

Je pense que vous pouvez le corriger manuellement, vos références doivent avoir un chemin d'indice relatif qui commence par ../../packages. Mais pour éviter cela à l'avenir Toutes vos solutions qui incluent ce projet doivent avoir la même structure. Par exemple, pour une autre solution, vous avez une structure comme :

MyOtherApp
- BusinessLogic
- DataAccess
- Externals
-- SubFolder
--- Core
--- Integration
- Web
- packages

Si dans ce cas vous ajoutez un paquet nuget au projet Core, la référence sera ../../../packages/.... Et Core sera à nouveau cassé dans d'autres solutions.

L'autre solution consiste à créer un paquet à partir des projets Core et Integration et à les utiliser dans d'autres solutions via nuget. Mon équipe utilise TeamCity pour cela, il peut empaqueter des projets, publier des paquets nuget et fonctionner comme un flux nuget prêt à l'emploi.

1voto

MackieChan Points 1711

Si vous souhaitez toujours le conserver en tant que sous-référentiel (par opposition à référencer les projets en tant que paquets NuGet), vous pouvez modifier les chemins d'indication pour toujours rechercher le répertoire de la solution.

Par exemple, j'ai changé

..\..\packages\Moq.4.2.1312.1622\lib\net40\Moq.dll

à

$(SolutionDir)packages\Moq.4.2.1312.1622\lib\net40\Moq.dll

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