2010-04-01 36 views
0

我們使用nettiers作爲我們的數據層的時候,我們最近已經開始考慮使用NServiceBus,但我們碰了壁拋出異常。NserviceBus引用Nettiers裝配

我們有哪些主機NSB和引用我們的Nettiers組件的Windows服務。

當遇到以下行時,該服務將引發異常。

var Bus = Configure.With().SpringBuilder() 
      .XmlSerializer() 
      .MsmqTransport() 
       .IsTransactional(false) 
       .PurgeOnStartup(false) 
      .UnicastBus() 
       .ImpersonateSender(false) 
      .CreateBus() 
      .Start(); 

即拋出的異常是:

Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 

裝載機異常消息是:

Could not load file or assembly 'Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.":"Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 

堆棧跟蹤是:

at System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) 
at System.Reflection.Assembly.GetTypes() 
at NServiceBus.Configure.<>c__DisplayClass1.<With>b__0(Assembly a) in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 122 
at System.Array.ForEach[T](T[] array, Action`1 action) 
at NServiceBus.Configure.With(Assembly[] assemblies) in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 122 
at NServiceBus.Configure.With(IEnumerable`1 assemblies) in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 111 
at NServiceBus.Configure.With(String probeDirectory) in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 101 
at NServiceBus.Configure.With() in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 78 
at MessageSender.Program.Main(String[] args) in C:\Development\NSBTest4\MessageSender\Program.cs:line 18 

沒有nettiers參考NSB作品精細。任何想法是什麼問題以及如何解決它?

謝謝。

回答

0

您可以排除使用 隨着(AllAssemblies.Except( 「nettiers DLL的名稱」))掃描nettiers DLL ...

+0

感謝您的建議,但不幸的是它沒有任何區別。 nettiers程序集在DataLayer.dll 中引用,並由我的NSB項目引用。因此我添加了With(AllAssemblies.Except(「DataLayer.dll」)) 但沒有任何影響。 – IGoor 2010-04-06 08:51:14

+0

你可以確保你的datalayer.dll和nettiers dll被排除在外:AllAssemlies.Except(「datalayer.dll」)和(「nettiers.dll」)? – 2010-04-07 14:09:44

+0

是的。我們嘗試過,沒有任何運氣。 (typeof(IMessage).Assembly,typeof(MessageItem.MessageItem).Assembly,typeof(NServiceBus.Unicast.Transport.CompletionMessage).Assembly,typeof() MessageReceiver.MessageHandler).Assembly) – IGoor 2010-04-23 16:34:04

0

微軟企業庫(由.NetTiers引用)是我們的問題,這是反過來引用一箇舊版本的Unity。爲了解決這個問題,我們使用以下綁定重定向的配置:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
       <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
       <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

或者,你可能只想更新企業庫到最新版本。