2012-03-01 1 views
0

J'essaie d'utiliser le log4net RabbitMQAppender dans une application console C#, et il semble que cela nécessite que RabbitMQ.Client 2.6.1.0 soit référencé. J'utilise actuellement la dernière version, 2.7.1.0, qui est à l'origine de la création appender à l'échec avec l'erreur suivante:Rediriger l'assembly référencé vers une version différente dans l'application console C#

Could not create Appender [AmqpAppender] of type [log4net.RabbitMQ.RabbitMQAppender, log4net.RabbitMQ]. Reported error follows. System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'RabbitMQ.Client, Version=2.6.1.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce' or one of its dependencies. The system cannot find the file specified.

Remplacement du RabbitMQ.Client avec la version précédente résout le problème, bien que je J'aimerais travailler avec la dernière version.

Selon another question ici sur le SO, la configuration suivante doit être ajouté aux paramètres de l'application, que j'ai ajouté: cela ne semble pas

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="RabbitMQ.Client" /> 
      <bindingRedirect oldVersion="2.6.1.0" newVersion="2.7.1.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Cependant, pour faire une différence, et erreur se produit toujours avec l'appender en lançant une erreur sur l'impossibilité de charger le fichier RabbitMQ.Client.

Y a-t-il autre chose à faire pour y parvenir, ou quelque chose qui pourrait empêcher cette redirection d'assemblage de fonctionner?

Répondre

0

Il semble que j'ai peut-être eu une discordance de configuration quelque part. Définition du fichier RabbitMQ.Client.dll pour copier local et l'ajout de ce qui suit à la configuration de mon application a résolu le problème:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="RabbitMQ.Client" publicKeyToken="89e7d7c5feba84ce" culture="neutral" /> 
      <bindingRedirect oldVersion="2.6.1.0" newVersion="2.7.1.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
0

J'ai eu un problème similaire. J'ai créé une DLL .NET qui a exposé une interface COM. En interne, ma DLL utilisait le RabbitMQ.Client.dll. Mon programmeur l'utilisait dans une application VB6. Il obtenait le même fichier erreur introuvable. Cependant, je pourrais créer une application VB6 en utilisant la DLL .NET et ne pas obtenir l'erreur. J'ai finalement utilisé ProcMon et filtré les résultats sur le nom du processus VB6.exe. J'ai été en mesure de déterminer que la DLL .NET référençait le fichier RabbitMQ.Client.DLL via un lecteur mappé au lieu d'un UNC. J'ai demandé au programmeur de cartographier le même lecteur et le problème s'est dissipé.

Questions connexes