Exception NserviceBus在引用Nettiers程序集时引发异常

Exception NserviceBus在引用Nettiers程序集时引发异常,exception,nservicebus,.nettiers,Exception,Nservicebus,.nettiers,我们使用nettiers作为我们的数据层,最近我们开始考虑使用NServiceBus,但我们遇到了麻烦 我们有一个windows服务,它托管NSB并引用我们的Nettiers程序集 当遇到以下行时,服务将引发异常 var Bus = Configure.With().SpringBuilder() .XmlSerializer() .MsmqTransport() .IsTransactional(false)

我们使用nettiers作为我们的数据层,最近我们开始考虑使用NServiceBus,但我们遇到了麻烦

我们有一个windows服务,它托管NSB并引用我们的Nettiers程序集

当遇到以下行时,服务将引发异常

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
stacktrace是:

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工作正常。你知道问题是什么,怎么解决吗


谢谢。

您可以使用
使用所有组件.nettiers dll的除外名…

我们的问题是.nettiers引用的Microsoft企业库,而这反过来又引用了旧版本的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>

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

谢谢您的建议,但遗憾的是,这没有任何区别。nettiers程序集在DataLayer.dll中引用,而DataLayer.dll又由我的NSB项目引用。因此,我添加了WithAllAssemblies.ExceptDataLayer.dll,但没有任何影响。您是否可以使用:AllAssemblies.ExceptDataLayer.dll.和nettiers.dll确保您的datalayer.dll和nettiers dll都被排除?是的。我们试过了,但运气不好。最后,我们通过指定要包含的程序集来完成工作:WithTypeOfMessage.Assembly、typeofMessageItem.MessageItem.Assembly、TypeOfServiceBus.Unicast.Transport.CompletionMessage.Assembly、typeofMessageReceiver.MessageHandler.Assembly