2009-09-04 8 views
3

Je dois ajouter une dépendance à une version spécifique de GDIPlus. Ceci est la version de GDI + que je veux:WinSxS: Comment prendre la dépendance sur une version spécifique de gdiplus.dll?

alt text http://i31.tinypic.com/2qiv57t.jpg

Je veux être sûr que j'utilise cette version pour une raison de compatibilité spécifique.

J'ai ajouté un ensemble manifeste à mon exécutable, de définir ma dépendance sur la version de GdiPlus:

<dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" name="Microsoft.Windows.GdiPlus" 
      pubicKeyToken="6595b64144ccf1df" 
      version="5.1.3102.2180" processorArchitecture="x86" 
      language="*" /> 
    </dependentAssembly> 
</dependency> 

Sauf quand je lance ma demande, le chargeur de fusion de Windows me donne une autre version gdiplus.dll du dossier Side-by-Side, que je peux voir dans Process Explorer:

alt text http://i29.tinypic.com/hrwitz.jpg

Il me donne la version 5.02.600 2.18005, plutôt que 5.1.3102.2180.

Donc la question est: Comment puis-je prendre une dépendance sur une version spécifique d'une DLL Windows?

+1

J'ai mal orthographié 'dépendance', je vais flic à cela.Mais j'utilise toujours un "i" minuscule lorsque je me réfère à moi-même. –

+0

Si vous votez en bas, il serait utile de savoir pourquoi. Cette question est-elle "peu claire ou pas utile"? –

Répondre

2

Votre « problème », tel qu'il est, est qu'il ya un fichier de stratégie installé qui spécifie que les demandes de 5.1.3102.2180 peuvent être redirigés vers 5.02.6002.18005

Ceci est, en général, une bonne chose. Il permet aux applications de spécifier la version à laquelle elles ont été intégrées dans leur manifeste, mais lorsque des correctifs de sécurité critiques sont introduits, le système d'exploitation peut rediriger les applications vers des versions compatibles.

Donc, ce qui va se passer ici, c'est que votre application va se lier à GDI + 5.1 sur n'importe quel PC qui a seulement installé 5.1. mais tout PC avec le 5.2 GDI +, vous serez redirigé vers celui-ci.

Si vous avez une raison honnête de croire que vous voulez utiliser 5.1, même quand 5.2 est disponible ... Je pense que vous pouvez utiliser un fichier de configuration d'application pour gérer cela.

Créer un fichier appelé, yourapp.exe.config - si le module dans votre thats application GDI + est importé une dll, il serait thedll.dll.2.config

Je ne suis pas sûr comment structurer la bindingRedirect cependant. c'est-à-dire étant donné la redirection des fichiers de politique, je ne sais pas si vous devez rediriger l'ancienne version vers elle-même, ou la nouvelle version vers l'ancienne version. ou quoi. certains essais et erreurs pourraient être nécessaires.

Les données du fichier .config ressemblent presque exactement aux données du fichier manifeste. Quelque chose comme ceci (qui imite presque exactement le contenu du fichier de politique installé dans winsxs faisant la redirection que vous ne voulez pas).

<configuration> 
    <windows> 
    <assemblyBinding xmlns=...> 
     <dependentAssembly name="GdiPlus...> 
     <bindingRedirect oldVersion="5.1.x.x" newVersion="5.1.x.x"/> 

Pour faire le choix de « ancienneversion » plus facile, il prend en charge une syntaxe de gamme. si

oldVersion="5.0.0.0-5.3.0.0" 

serait un moyen simple de faire en sorte que toute une gamme de versions GDIplus redirigés vers une version spécifique.

Questions connexes