2010-05-31 6 views
3

J'ai un assemblage avec quelques versions enregistrées dans le GAC. Maintenant, je veux qu'un de mes clients qui utilise cet assemblage (version 1.3) pointe vers la version la plus récente (1.4) sans ouvrir la source et recompiler le client.
J'ai vu un article qui démontre une technique de le faire en utilisant le fichier de configuration de l'application (l'application WinForm)C# Comment rediriger le chargement de l'assemblage à l'aide du fichier de configuration de l'application

ici est le contenu du fichier de configuration:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration xmlns:asm="urn:schemas-microsoft-com:asm.v1"> 
<runtime> 
<asm:assemblyBinding> 
    <!-- one dependentAssembly per unique assembly name --> 
    <asm:dependentAssembly> 
    <asm:assemblyIdentity 
     name="MyFacade" 
     publicKeyToken="c9c18e16df1654e0" /> 
    <!-- one bindingRedirect per redirection --> 
    <asm:bindingRedirect oldVersion="1.3.0.0" 
        newVersion="1.4.0.0" /> 
    </asm:dependentAssembly> 
</asm:assemblyBinding> 
</runtime> 
</configuration> 

Comme vous pouvez le voir, il y a une liaison Dévier à partir de version 1.3.0.0 à 1.4.0.0 pour l'assembly nommé MyFacade.

Maintenant, il n'y a qu'un problème mineur avec cette approche. Cela ne fonctionne pas :)

Je suis sûr que c'est quelque chose avec mon code.

Des suggestions?

Merci,
Adi Barda

+0

Utilisez fuslogvw.exe pour voir ce que le CLR considère. –

Répondre

3

premier, this is the best source que j'ai trouvé à ce sujet. Il existe certaines différences, par exemple, ils n'utilisent pas l'espace de noms asm: et vous pouvez également désactiver la stratégie d'éditeur en ajoutant <publisherPolicy apply="no" /> comme décrit dans l'article.

Dans un projet précédent, nous avions besoin d'encore plus de contrôle, donc nous devions attraper le AppDomain.AssemblyResolve Event et l'acheminer vers n'importe quel assemblage que nous voulions. Here vous pouvez trouver plus d'informations sur le concept. Cependant, vous devrez manipuler votre application une seule fois.

+0

Merci, ceci m'a aidé à résoudre un problème similaire à l'OP :) – Chris

Questions connexes