В моем конкретном случае мы используем клиентский пакет RabbitMQ от NuGet и имеем некоторые проблемы с его автоматическим восстановлением. Я хочу добавить дополнительное ведение журнала в реализацию, поэтому я взял исходный код для версии, которую мы используем, добавил несколько строк сообщений журнала и построил его. В идеале я мог бы разместить сборку на нашей тестовой машине, которая воспроизводит проблему, установить временное перенаправление привязки и прекратить работу. Но насколько я могу судить, он игнорирует перенаправление:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="RabbitMQ.Client" publicKeyToken=null culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
Вот сообщение об ошибке, которое я получаю, когда пытаюсь запустить его:
.\ClientAgent.Service.exe :
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Unhandled Exception:
System.IO.FileLoadException: Could not load file or assembly 'RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce' or one of its dependencies. The located assembly's
manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
at ClientAgent.Service.RabbitMqNLogEventListener..ctor()
at ClientAgent.Service.ClientAgentProgram.Main()
Обратите внимание, что он все еще ссылается на PublicKeyToken of 89e7d7c5feba84ce.
- Вероятно, это из-за строгого именования, или в этом случае ошибка будет более конкретной c?
- Возможно ли это вообще, или есть sh лучший способ достичь этой цели?
- Я мог бы перестроить свой агент, указывающий на эту dll, но у нас есть полдюжины или более внутренних библиотек, которые он использует, которые также полагаются на пакет rabbit, и я предполагаю, что ' d придется вручную обновить все свои ссылки на локально созданную dll.