web-dev-qa-db-fra.com

Dll dans le bac et le gac, lequel s'habitue?

Nous avons une application Web déployée sur de nombreux sites Web avec uniquement des modifications frontales. La partie dorsale partagée contient DLL dans le GAC. Nous n'avons donc qu'à mettre à jour cette dll et tous les sites reçoivent la mise à jour.

Existe-t-il un moyen de remplacer le GAC par un DLL dans le dossier/bin afin de tester les nouvelles fonctionnalités avant leur publication?

67
John Boker

Si elle porte le même numéro de version que la DLL référencée, le GAC est utilisé. 

Si vous incrémentez le numéro de version, reconstruisez le site Web en référant le nouveau numéro de version, placez la nouvelle version dans le répertoire/bin, le DLL sera utilisé.

Si vous ne voulez pas changer le numéro de version, vous avez peu de chance. 

Lorsque .NET charge des assemblys nommés forts, il essaie d'abord de décider du numéro de version à utiliser. Cela se fait d'abord via la référence, puis il cherche les politiques de l'éditeur , puis il cherche les redirections de liaison dans le fichier de configuration. 

Après cela, il recherche l'assembly dans le GAC, puis dans tout codebase spécifié , puis il sonde différents dossiers du système de fichiers pour la DLL. Si, à l'une de ces étapes, il trouve la bonne version Assembly, il s'arrête.

Si vous ne modifiez pas le numéro de version de votre assemblage nommé, le .NET trouvera l'original dans le GAC et cessera de chercher. Notez que parce qu’il s’arrête lorsqu’il en trouve un, et parce que chercher dans le GAC est premier, spécifier une base de code pour votre assembly ne servira à rien si vous ne spécifiez pas également un nouveau numéro de version.

79
Adam Sills

J'ai été en mesure de remplacer le GAC avec l'Assemblée dans le dossier\bin à l'aide de <codebase> Element.

En spécifiant <codebase version="1.2.3.4" href="/bin/MyAssembly.dll" /> dans mon fichier web.config, je peux dire à mon application d'utiliser cette version plutôt que la version spécifiée dans le GAC.

Vous pouvez également consulter le <probing> Element pour spécifier les emplacements d'assemblage?

11
IsolatedStorage

Je pense que je pourrais dire la même chose qu'Adam Sills, mais reformulé pour mieux comprendre. D'après mes propres tests, voici ce qui se passe:

  • Si votre application est compilée avec les versions 1.0.0.0 et 1.0.0.1 du GAC, vous pouvez omettre le fichier .dll de votre/bin.
  • Si votre application est compilée avec les versions 1.0.0.1 et 1.0.0.0 du GAC, vous DEVEZ alors placer le fichier .dll dans votre/bin pour ignorer le GAC. Une erreur se produira si la version de GAC est antérieure à la version requise de votre application, sauf si vous incluez la version la plus récente dans votre/bin.

J'espère que c'est correct...

2
J.Hendrix

Vous pouvez afficher les informations de liaison dans le fichier journal à l'aide de la visionneuse du journal de liaison d'assemblage (Fuslogvw.exe), incluse dans le Kit de développement logiciel Windows (SDK).

s

0
BALKANGraph