2010-09-15 22 views
6

Disons que j'ai deux projets A et B. A dépend de B. Je peux préciser de deux façons:Différence entre projets et dépendances dll en .Net dans l'assembly compilé finale

  • Inclure A et B dans la même solution et spécifiez B comme dépendance de projet pour A. Cela apparaît dans le projet msbuild de A en tant que nœud "ProjectReference".
  • Inclure une référence à la dll B compilé en tant que dépendance pour A. Cela se manifeste dans le projet msbuild de A comme noeud « de référence »

Ma question est, une fois que j'ai construire l'ensemble A, est il y a une différence dans la sortie finale entre ces deux méthodes.

J'ai essayé de créer quelques projets simples qui modélisent cette relation et essayent une comparaison - mais différents outils de comparaison me disent des choses différentes. En attendant d'écrire quelque chose qui compare ces fichiers octet par octet, je me demandais si vous saviez quelque chose à ce sujet. Plus précisément, y aura-t-il une différence dans le comportement de l'assemblage construit si j'utilise une référence dll au lieu d'une référence de projet.

Répondre

5

Si les sources du projet B n'ont pas changé entre deux versions du projet A, il n'y aura pas de différence dans le comportement de la sortie du projet A. Cependant, si les sources du projet B ont changé, le référencer en tant que projet à partir du projet A entraînera également la reconstruction du projet B. Cette différence est ce qui détermine votre choix de comment référencer le projet B du projet A:

  • si vous possédez la source des deux projets B et projet A, et ils sont accouplées bien, ou si les deux sont en activité le développement et le projet B subissent souvent des changements brisants de son interface publique, vous voulez référencer le projet B comme projet. Cela garantirait que le projet A utilise toujours dans sa construction la sortie la plus à jour du projet B.

  • si le projet B est une dépendance externe vous ne développez pas vous-même, ou vous n'avez pas les sources pour ou si elle a déjà été expédiée et que vous ne pouvez pas envoyer de version modifiée avec le projet A, vous voulez référencer la sortie B du projet prédéfini pour vous assurer que vous développez et testez avec la même version du projet B, c'est-à-dire susceptibles d'être sur les ordinateurs de vos utilisateurs.

+0

@Timwi - merci pour le réglage de la direction de dépendance droite :-) pour une raison quelconque je l'ai écrit exactement le contraire de l'exemple –

+3

de l'OP ajouter également à la réponse, au cas où votre projet B dépendait disons C. dll, si B est spécifié en tant que dépendance de projet A, la compilation du projet A amènera automatiquement les dépendances du projet B (par exemple C.dll). Au lieu de cela, si vous incluez une référence à la DLL compilée de B, C.dll ne sera pas automatiquement ajouté à la corbeille de A, mais vous devrez ajouter manuellement toutes les dépendances de B. –

3

L'ajout en tant que référence de projet présente l'avantage que l'assemblage "B" est automatiquement construit si nécessaire.

Une fois l'assemblage "A" construit, il n'y a pas de différence.