2016-12-19 2 views
0

J'étudie des assemblages et confus sur certains points après la recherche je pose la question ici. J'ai lu à propos de la résolution de l'assemblage que pour les assemblys fortement nommés, l'ordre de résolution de l'assemblage est de vérifier d'abord le GAC, puis le répertoire racine puis le sondage privé.
Supposons que j'ai une solution avec plusieurs projets et qu'il y ait un dossier pour placer tous les assemblages de référence disons log4net et dans le projet où j'ai besoin d'assembler log4net j'ajoute référence de log4net dll pointant vers le dossier dans le répertoire de solution d'application où toutes les DLL référencées ont été placées. Alors pourquoi CLR vérifie GAC et ensuite le répertoire racine, etc. pourquoi pas du chemin mentionné lors de l'ajout de la référence..net-assemblage résolution

Répondre

1

Je pense que vous voulez dire "dans Visual Studio" quand vous dites "ajouter une référence à ceci".

Que se passe-t-il lorsque vous exécutez le programme sur une machine où ce chemin n'existe pas?

Btw. la "Ajouter une référence" dans Visual Studio est uniquement utilisée au moment de la compilation. Il va copier la DLL référencée dans le dossier cible.

Visual Studio crée un dossier cible (Standard bin \ Debug ou bin \ Release) dans le dossier du projet et stocke tous les fichiers (exe, dll, config) pour le déploiement.

L'installation de DLL dans GAC doit être effectuée manuellement et n'a de sens que s'il s'agit d'une DLL utilisée par plusieurs applications et qui doit être utilisée avec précaution.

Vous pourriez obtenir des erreurs étranges et difficiles à trouver lorsque votre application charge un DLL de GAC et cette DLL a une autre version comme prévu par votre application.

+0

Alors, est-ce que toutes les DLL référencées dans le dossier de la solution d'application sont installées dans GAC? Le foder qui est la partie de la solution de l'application et tous les dll int il ne sera pas la partie du déploiement? –