2010-04-01 37 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> 

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