【问题标题】:NserviceBus throws exception when referencing a Nettiers assemblyNserviceBus 在引用 Nettiers 程序集时抛出异常
【发布时间】:2013-09-18 21:48:37
【问题描述】:

我们使用 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

堆栈跟踪是:

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 工作正常。知道问题是什么以及如何解决吗?

谢谢。

【问题讨论】:

    标签: exception nservicebus .nettiers


    【解决方案1】:

    您可以使用以下命令从扫描中排除 nettiers dll With(AllAssemblies.Except("name of nettiers dll"))...

    【讨论】:

    • 感谢您的建议,但不幸的是它没有任何区别。 Nettiers 程序集在 DataLayer.dll 中被引用,而我的 NSB 项目又引用了它。所以我添加了 With(AllAssemblies.Except("DataLayer.dll")) 但没有影响。
    • 您能否确保您的 datalayer.dll 和 nettiers dll 都被排除在外:AllAssemlies.Except("datalayer.dll").And("nettiers.dll")?
    • 是的。我们试过了,没有任何运气。我们通过指定要包含的程序集来完成它的工作:With(typeof(IMessage).Assembly, typeof(MessageItem.MessageItem).Assembly, typeof(NServiceBus.Unicast.Transport.CompletionMessage).Assembly, typeof(MessageReceiver.MessageHandler ).组装)
    【解决方案2】:

    Microsoft 企业库(由 .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>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 2013-09-05
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多