2010-06-15 2 views
6

Dans mon application web j'utilise NHibernate.dll. Cela dépend de l'assemblage suivant.Comment résoudre les assemblages en conflit dans .Net?

'Antlr3.Runtime, Version = 3.1.0.39271, Culture = neutral, PublicKeyToken = 3a9cab8f8d22bfb7'

Maintenant, dans le même projet pour une autre exigence que je dois présenter Antlr3.StringTemplate. dll. Qui a une dépendance sur une autre version de l'assembly ci-dessus.

Si j'utilise la version de Antlr3.Runtime.dll qui satisfait NHibernate, Antlr3.StringTemplate commence à se plaindre et vice-versa.

Comment résoudre une situation comme celle-ci?

Répondre

5

Vous pouvez probablement utiliser assemblyBinding dans votre fichier web.config pour rediriger votre version la plus récente vers l'ancienne version.

Exemple:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4"/> 
      <bindingRedirect oldVersion="2.1.0.4000" newVersion="2.1.2.4000"/> 
     </dependentAssembly>    
    </assemblyBinding> 
</runtime> 

Cela va directement sous le nœud <configuration> dans votre web.config.

Vous pouvez lire ici combat: http://msdn.microsoft.com/en-us/library/2fc472t2%28VS.71%29.aspx

4

La chose la plus simple serait de recompiler les deux avec la même version. Vous pouvez également supprimer la spécification de version de la référence (et définir une version spécifique sur false).

1

Nous avons dû faire ce que Jim Lamb suggère. Nous avons construit des versions locales de toutes nos «bibliothèques tierces» (comme nous les avons surnommées), ciblant des noms forts et des dépendances explicites (par rapport à ce que vous pourriez obtenir lorsque vous téléchargez une DLL qui dépend d'une autre). Nous avons engagé ces builds locaux dans notre dépôt (Subversion). Ensuite, nous avons placé les assemblys résultants dans un dossier "Dependencies/lib" sous la racine de chacun de nos projets qui dépendait de ces assemblages. Cela nous a permis de les ajouter en tant que références VS en utilisant ses capacités de localisation de chemin relatif.

1

i eu le même problème.

est-ce que bindredirect a fonctionné pour vous?

je l'ai essayé comme ça, mais rien n'a changé:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="3a9cab8f8d22bfb7" culture="neutral" /> 
      <bindingRedirect oldVersion="*" newVersion="3.1.3.6002" /> 
      <publisherPolicy apply="no"/> 
     </dependentAssembly> 
    </assemblyBinding> 

même erreur est apparu.

J'ai donc décidé d'aller avec la solution d'ajouter l'ancienne version de l'assembly Antlr3.Runtime à gac. Maintenant, cela fonctionne parfaitement.

Questions connexes