2009-11-17 4 views
9

J'ai une bibliothèque de classes appelée "MyAssembly" qui référence en interne a.dll, b.dll de la version 3.1.1.0; J'ai construit le projet qui a produit MyAssembly.dll. Sur un autre système (boîte) j'ai créé un projet d'application Web et référencé MyAssembly.dll. le nouveau système a de nouvelles versions de a.dll et b.dll 4.0.0; J'ai utilisé la redirection de liaison dans web.config comme ci-dessous. Mais toujours incapable de compiler l'application Web. il indique la référence d'assemblage manquante a.dll, version 3.1.1.0.Problème de redirection de liaison dans .net

Quel organisme pourrait-il aider à résoudre ce problème?

Merci, Suresh

Répondre

6

Cela devrait fonctionner.

<runtime> 
<dependentAssembly> 
    <assemblyIdentity name="MyAssembly" publicKeyToken="12233444"/> 
    <bindingRedirect oldVersion="3.1.1.0" newVersion="4.0.0.0"/> 
</dependentAssembly> 
</runtime> 

Une autre suggestion: Supprimer l'espace de noms de votre balise de configuration:

Au lieu de

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

essayer

<configuration> 
+0

je l'ai fait exactement la même. Mais pas de chance. Lors de la compilation du projet dans ide lui-même en donnant l'erreur en disant "êtes-vous manquant assemblyreference a.dll 3.1.1.0 – Suresh

+1

La balise de configuration ne contient pas l'attribut xmlns.Non chance – Suresh

+0

Cela a fonctionné de mon côté, merci Ma question est pourquoi ça marche quand le L'attribut xmlns a été supprimé? – csg

0

Vous utilisez MyAssembly dans votre application web. La redirection de liaison sera utilisée pour cet assemblage et non pour les assemblages utilisés par MyAssembly. Vérifiez le manifeste pour MyAssembly.dll, il devrait se référer aux versions 3.1.1.0 d'un.dll, d'où l'erreur du compilateur est affichée. Construisez le MyAssembly en vous référant à a.dll de la version 4.0.0.0, puis utilisez MyAssembly dans votre application Web. Cela fonctionnera.

0

Essayez de cette façon:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="a.dll" 
         publicKeyToken="{put a.dll publicKeytoken here}" 
         culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" 
        newVersion="4.0.0.0"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="b.dll" 
         publicKeyToken="{put b.dll publicKeytoken here}" 
         culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" 
        newVersion="4.0.0.0"/> 
    </dependentAssembly> 
</assemblyBinding> 

En outre, consultez les références de votre application, cliquez droit sur le a.dll et b.dll, accédez aux propriétés et vérifier si « Version spécifique » est définie sur False .

Espérons que ça aide.

19

Cela a totalement fonctionné pour moi. REMARQUE: Vous avez besoin de aucun espace de noms sur la balise configuration. Et vous DOIT avoir un espace de noms sur votre tag assemblyBinding.

<assemblyBinding> Element for <runtime>

<!-- important: no namespace --> 
<configuration> 
    <runtime> 
    <!-- important, must have this namespace --> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Strongly.Named.Assembly" publicKeyToken="xxx" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Est-ce que les deux personnes, ou bien il ne sera pas lu. Si elle donne une erreur qu'elle ne peut pas charger autre chose que 2.0.0.0 dans cet exemple, elle ne récupère pas correctement les éléments de configuration.

Cela ne fonctionne également que sur les assemblys fortement nommés.Pour savoir si quelque chose est fortement nommé exécutez la commande suivante à partir de la fenêtre de commande VC

ouvert (menu Démarrer> Tous les programmes> studio visuel> Visual Studio Tools> invite de commande visual studio)

lancer:

sn -vf "path-to-assembly.dll" 

S'il retourne que c'est valide, alors il est fortement nommé.

source: http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/

+0

J'ai corrigé complètement un problème que j'avais avec une redirection de liaison qui était ignorée pour un projet web .. Merci! – Jaans

+0

JE T'AIME, tu as sauvé ma santé mentale, j'ai enlevé l'espace de nom de la balise 'configuration' –

+0

Un grand merci! Il manquait un espace de noms dans assemblyBinding –