2009-10-22 9 views
16

J'ai une solution avec 3 projets (GUI, BL et DAL). L'assembly DAL est signé et déployé dans le GAC..NET priorités de chargement de l'ensemble

Lorsque je compile la solution, le DAL est compilé et l'ensemble placé dans le dossier bin du projet principal. Mais quand je lance l'application, elle charge la version GAC au lieu de la version locale. Pourquoi est-ce?

Je me suis rendu compte que parce que la version dans le GAC n'était pas la dernière et certaines méthodes manquaient, même si elle compilé bien.

Le GAC a-t-il la priorité sur le dossier bin local?

TKS à l'avance

Répondre

19

Réponse courte Oui, le GAC a priorité sur les fichiers locaux.
Il s'agit d'un comportement différent de celui auquel nous sommes habitués dans le monde dll natif (à l'exception de certaines DLL système qui ont toujours été chargées depuis SYSTEM32, quoi qu'il arrive).

Pourquoi?
Imaginez que vous ayez plusieurs applications avec le même assemblage maintenant que l'assembly a un bug. Comment réparez-vous toutes vos applications? Il est difficile de démarrer la recherche de toutes les applications sur tous les pilotes, il est plus facile de déployer un seul assembly sur le GAC et de corriger toute l'application en même temps. En ce qui concerne votre problème, si vous changez l'API, vous devez changer la version d'assemblage de cet assemblage, de cette façon le moteur de fusion récupérera la version qui se trouve dans le dossier local.

+0

Tks pour la réponse, spécialement pour la dernière partie sur le versioning. – Dante

7

Oui, il vérifie le GAC premier. Les règles de chargement sont documentées here. Pour résoudre votre problème, vous devez mettre à jour la version de l'assembly lorsque vous modifiez l'API.

+0

Tks pour le lien, très utile! – Dante

Questions connexes