2017-10-20 85 views
0

使用easynetq時,我遇到了rabbitmq.client版本的問題,但我不知道究竟是什麼原因造成的!我的解決方案包含一個WindowsService(exe文件)和多個庫項目,都是針對.NET 4.6.2構建的。與rabbitmq.client版本的噩夢

在我exe.conf(服務可執行的)文件,我看到下面的條目:

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

這會導致系統崩潰,以下情況例外:

2017-10-20 09:58:49,185; [9]; INFO ; MqService1Log; [AppHost.Configure]; - Registering RabbitMQ server using the EasyNetQ library.... 
2017-10-20 09:58:49,260; [9]; ERROR; MqService1Log; [Program.Main]; - System.IO.FileLoadException: Die Datei oder Assembly "RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040) 
Dateiname: "RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce" ---> System.IO.FileLoadException: Die Datei oder Assembly "RabbitMQ.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040) 
Dateiname: "RabbitMQ.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce" 

=== Zustandsinformationen vor Bindung === 
LOG: DisplayName = RabbitMQ.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce 
(Fully-specified) 
LOG: Appbase = file:///D:/Projects/BizBusMQSamples/MqService1/MqService1/MqService1/bin/Debug/ 
LOG: Ursprünglicher PrivatePath = NULL 
Aufruf von Assembly : EasyNetQ, Version=2.0.4.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: Diese Bindung startet im default-Load-Kontext. 
LOG: Die Anwendungskonfigurationsdatei wird verwendet: D:\Projects\BizBusMQSamples\MqService1\MqService1\MqService1\bin\Debug\MqService1.vshost.exe.Config 
LOG: Die Hostkonfigurationsdatei wird verwendet: 
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config wird verwendet. 
LOG: In der Anwendungskonfigurationsdatei wurde eine Umleitung gefunden. 4.0.0.0 wird nach 5.0.0.0 umgeleitet. 
LOG: Verweis nach der Richtlinie: RabbitMQ.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce 
LOG: Die gleiche Bindung ist bereits aufgetreten und hat den Fehler hr = 0x80131040 verursacht. 

    bei System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType) 
    bei System.Reflection.RuntimeMethodInfo.FetchNonReturnParameters() 
    bei System.Reflection.RuntimeMethodInfo.GetParameters() 
    bei System.Diagnostics.StackTrace.ToString(TraceFormat traceFormat) 
    bei System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) 
    bei System.Exception.GetStackTrace(Boolean needFileInfo) 
    bei System.Exception.ToString(Boolean needFileLineInfo, Boolean needMessage) 
    bei System.Exception.ToString(Boolean needFileLineInfo, Boolean needMessage) 
    bei System.Exception.ToString() 
    bei System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args) 
    bei System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args) 
    bei System.String.Format(String format, Object arg0, Object arg1) 
    bei MqService1.AppHost.Configure(Container container) in D:\Projects\BizBusMQSamples\MqService1\MqService1\MqService1\AppHost.cs:Zeile 51. 
    bei ServiceStack.ServiceStackHost.Init() 
    bei MqService1.Program.Main(String[] args) in D:\Projects\BizBusMQSamples\MqService1\MqService1\MqService1\Program.cs:Zeile 30. 

東西似乎需要的RabbitMQ客戶端5,而其他東西需要版本4.因爲EasyNetQ似乎不支持5.0.1(我在連接工廠時出現未知方法錯誤),我做了不是升級到5.0.1並保持與RabbitMQ.Client 4.1.3

如果我更改bindingRedirectoldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"(換版從5到4).conf文件,一切工作正常。 問題是,我每次構建項目時都會重新變回5!

也許我必須添加以下信息:該解決方案包含一個包含一些管理功能的庫項目。該項目包含EasyNetQ.Management.Client,但根據NuGet信息,它具有編號依賴關係。然而,當我從我的解決方案中刪除這個庫項目,配置文件是不會改變.....

任何想法這裏發生了什麼,我怎麼能解決它?任何幫助是極大的讚賞。

編輯

如果我從溶液中取出庫項目,它仍然改變我的配置文件,以5個版本,必須由別的東西造成的。

回答

0

更新@ThommyB:我剛剛發佈EasyNetQ 2.2.0,謹慎嘗試?


我以前從未見過這種行爲,我懷疑還是有引用或包RMQ 5

你介意升級到這個版本? https://www.nuget.org/packages/EasyNetQ/2.3.0-alpha0002

這將爲您帶來RabbitMQ 5客戶端。沒有很多其他事情發生了變化,所以我不認爲這是一個很大的風險。

+0

隨着更新它再次運作。希望很快看到最終的決定,使用標記爲'alpha'的版本在我的環境中不能生產。但感謝您的幫助! – ThommyB