NServicebus和GAC

时间:2010-07-02 03:07:06

标签: c# gac nservicebus

我最近尝试将NServiceBus库迁移到GAC,因为它们非常大,几乎在我的所有软件中都是必需的。我正在使用最新的.NET 4.0 Build(2.0.0.1219)并使用GACUTIL复制NServiceBus& NServiceBus.Core将新的GAC和log4net转换为旧的2.0 GAC。我已经设法通过在版本和PublicKeyToken中连线来使log4net正常工作,但我无法让NServiceBus.Core正常工作。每次我启动一个软件时,我都会收到以下错误:

“类型NServiceBus.Unicast.Transport.CompletionMessage未在序列化程序中注册。请检查它是否出现在要扫描的已配置程序集/类型列表中。”

当我将DLL NServiceBus.Core复制到本地文件夹时,它可以正常工作。

我的配置如下所示:

<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core, Version=2.0.0.1219, Culture=neutral, PublicKeyToken=9fc386479f8a226c" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core, Version=2.0.0.1219, Culture=neutral, PublicKeyToken=9fc386479f8a226c" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
<sectionGroup name="common">
  <section name="logging" type="Common.Logging.ConfigurationSectionHandler, NServiceBus.Core, Version=2.0.0.1219, Culture=neutral, PublicKeyToken=9fc386479f8a226c"/>
</sectionGroup>

所以我想知道还有其他人让NServiceBus成功地与GAC合作吗?

干杯

2 个答案:

答案 0 :(得分:2)

NServiceBus剥离强名称是一个问题。使用<runtime>中的web.config元素:

<runtime>
    <qualifyAssembly partialName="MessagesDll" fullName="MessagesDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4d476a51357cea5c" />

答案 1 :(得分:1)

NServiceBus扫描目录中的程序集(应用程序的运行目录,Web应用程序的网站编译目录),以便加载所有消息处理程序,这意味着它还需要扫描所有类型的自身它需要依赖注入。

我不确定此模型默认支持GAC中的程序集,但如果您自己配置NServiceBus,则可以通过NServiceBus.Configure.With(params Assembly []程序集指定要自行加载的程序集) )重载,只需确保至少包括所有NServiceBus程序集和Log4Net。

但是,我认为GAC-NSB集会可能不是最好的主意。每个端点都有自己的程序集副本,这增强了端点的自治性,如果您需要升级到新版本的NServiceBus,将会更容易,因为您可以单独测试每个端点,而不仅仅是GAC中的新程序集,添加绑定重定向,并希望一切都继续正常运行。