Question

Est-il possible d'effectuer un ensemble de fixation entre redirect différentes versions d'un ensemble référencé si le jeton de clé publique est nulle sur l'ancienne version et définie sur la nouvelle version?

Par exemple, j'ai deux assemblées ...

System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

et

System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Si le travail de liaison suivant l'assemblage redirect dans le web.config Asp.Net ...

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
Était-ce utile?

La solution

Non, il est impossible. Les assemblées doivent avoir la même publicKeyToken.

La balise bindingRedirect ne dispose que les attributs ancienneversion et newVersion, donc il n'y a aucun moyen de le dire sur la version « null » de toute façon.

Mais la vraie raison est expliquée en raison de la fort mécanisme de nom

Autres conseils

Vous pourriez être en mesure d'utiliser le AppDomain.AssemblyResolve événement pour le faire. J'ai inclus quelques exemples de code dans cette réponse .

Il ne semble qu'une redirection de liaison ne peut pas être utilisé, mais dans mon cas, j'a réussi à contourner le problème avec différents publicKeyTokens en modifiant la valeur de jeton demandée dans la DLL de référence:

Démontez la dll IL, référence du changement, réassembler (et re-signe - qui pourrait être un problème si vous n'avez pas KeyFile).

(voir mon commentaire sur lors du référencement des assemblages, est-il possible d'insister sur un numéro de version, mais ignorer le publickeytoken? (c.-à-accept signé / non signé) )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top