41 votes

NuGet et de multiples solutions

Nous avons deux solutions: foo.la sln et d'un bar.la sln

J'ai une bibliothèque commune qui est utilisée par les foo et bar. Commun.csproj est utilisé par les deux.

Si j'ouvre foo et mise à jour de nuget références, toutes les références Communes.csproj point de foo/packages/. Si plus tard, j'ai ouvert un bar et mise à jour de nuget références, toutes les références préparez-vous à ceux bar/packages/. Naturellement, ce pisse hors du foo équipe, car il peut causer des incompatibilités entre les Communes.csproj et Foo-choses spécifiques, comme Toto.Les données.csproj, qui pointe toujours vers foo/packages.

Il doit y avoir une solution autre que: "la création d'un immense solution qui contient tous vos projets, et si vous avez besoin de toucher nuget, ne le font qu'à partir de cette solution."

Il semble y avoir un problème sur codeplex, (haut voté problème, d'ailleurs), mais évidemment, je suis trop épais pour comprendre comment ce problème est résolu. Quelqu'un peut m'expliquer comment résoudre ce problème?

35voto

Daniel Dyson Points 9913

Ce problème qui précède NuGet. Si vous avez un projet référencé dans deux solutions de, et le changement des références d'assembly dans le projet lorsqu'il est ouvert dans une solution, bien sûr, il va changer le chemin de référence pour ce projet lorsqu'il est ouvert dans l'autre solution. Cela a toujours été le cas, indépendamment de la manière dont la référence a été modifiée (avec NuGet ou autre).

Mais le vrai problème, c'est que lorsque vous faites une mise à jour, les paquets mis à jour n'apparaissent pas dans le foo/packages répertoire de droit?

La solution la plus simple est de se déplacer en Commun.csproj dans une solution de son propre, avec ses propres références, dossier packages, de construire et de processus de libération. Ensuite, créez un package NuGet de votre propre avec des dépendances construit en elle. Ensuite, vous pouvez installer votre package Commun dans les deux Foo et Bar et puis Foo équipe est libre de mettre à jour à la dernière version de la Commune comme et quand ils sont prêts.

Le principal argument que j'ai entendu à l'encontre de cette est que vous ayez envie de parcourir le code Commun pendant le débogage, mais ce n'est plus un problème avec Visual Studio 2010.

La question fondamentale que vous devez poser est de savoir qui est propriétaire Commun.csproj? Est-ce le Foo de l'équipe ou de l'équipe du Bar?

1voto

Nathan Points 382

Pourquoi ne pas avoir common.csproj en tant qu’assemblage distinct auquel vous faites référence et qui possède ses propres dépendances plutôt que celles de la solution qui se trouve dans.

En faisant cela, vous protégez common de foo ou bar en mettant à jour le paquet référencé et en le décomposant.

1voto

aple Points 1

Dans notre cas, de nombreux développeurs et des solutions avec tfs, et plusieurs versions dans les différentes branches ... et chaque développeur de leur compréhension de l'endroit où la source doit se situer.

Chemin relatif dans ce cas, pas de travail, des chemins absolus en cas de coïncidence de disque sont remplacés par une relative et n'a pas de travail.

Notre solution consiste à se débarrasser du chemin d'accès relatif. Vous pouvez le faire si vous mettez NuGetPackages sur un disque séparé. comme suit:

net use /persistent:yes p: \\localhost\C$\NuGetPackagesDiskFolder

Tout nom de dossier, vous ne
Après cela, vous pouvez spécifier vraiment chemin d'accès absolu dans la NuGet.Config

<config>
<add key="repositorypath" value="p:\NuGetPackages" />
</config>
<packageRestore>
<add key="enabled" value="True" />
</packageRestore>

Après tout supprimer suo fichiers

ps: un peu de mal avec la modification de l'exsistant solutions, si elles vivent dans sourcecontrol manière la plus facile est de corriger le chemin d'accès à p:\NuGetPackages dans chaque .csproj Sinon, il est nécessaire de réinstaller toutes les refs et manuellement annuler tous les paquets.config marqué comme supprimé dans le sourcecontrol

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