J'ai une question concernant les versions 2 CLR, c'est-à-dire la version 2 et la version 4 du framework .NET, qui utilisent différents emplacements GAC. J'ai une application cliente construite qui fait référence à un assembly "X" du v2 GAC (C: \ Windows \ Assembly). Je suis en train de mettre à jour l'assembly "X" pour l'exécuter sur la version 4 du framework .NET (C: \ Windows \ Microsoft.NET \ assembly), mais je ne veux pas recompiler l'application cliente. Notez que l'assembly "X" est supprimé du GAC v2 avant d'installer le GAC to v4.Redirection des versions d'assembly vers un autre CLR/GAC
Est-il possible de créer un fichier de stratégie d'éditeur qui redirige un assembly qui résidait dans la version 2 du CLR vers la version 4 du CLR? Si oui, comment cela est-il réalisé?
J'ai recherché le MSDN, et comprenez qu'il existe un champ applyTo sur l'élément assemblyBinding dans lequel vous pouvez spécifier la version du framework .NET, mais cela semble englober la totalité de bind.
Ce que je voudrais est quelque chose comme:
<bindingRedirect oldVersion="1.0.0.0" .Net 2 newVersion="2.0.0.0" .Net 4/>
J'ai lu ici http://msdn.microsoft.com/en-us/magazine/dd727509.aspx que les applications v2.0 CLR maintenant ne peut pas voir les assemblées CLR v4.0 dans le GAC. Cependant, vous pouvez forcer une application à utiliser le CLR mis à jour à l'aide:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
Ainsi serait un mélange de ce plus la politique éditeur suffisent, ou est-il un autre moyen?
Merci; Nous avons des clients sur le terrain qui ont été construits en interface avec l'assembly dans le GAC, donc quand nous publions une nouvelle version de l'assembly (en remplaçant, pas en ajoutant), nous ne voulons pas les forcer à recompiler avec la nouvelle version - d'où pourquoi utilisons-nous des assemblys de stratégie d'éditeur pour la redirection? C'est bien que nous puissions éviter la recompilation de l'application client; Cependant, cela signifie que nous devons maintenant nous assurer que le client dispose d'un app.config, et n'oubliez pas de les mettre à jour pour prendre en charge le runtime v4 lorsque nous publions le nouvel assembly tel que décrit. Ce serait bien si la politique de l'éditeur pouvait faire face à cela! – Jeb
Il existe un paramètre de registre par lequel vous pouvez forcer toutes les applications à s'exécuter sous le CLR le plus récent. Voir cette réponse: http://stackoverflow.com/questions/2094694/launch-powershell-under-net-4/2096906#2096906. Je ne sais pas si c'est faisable pour vous, mais cela supprimerait certainement le besoin d'avoir un App.config en place pour chaque client (à condition de pouvoir automatiser les réglages du registre via un GPO ou similaire, bien sûr!). – mthierba