NServiceBus.dll - 版本5.2.9& NServiceBus.Host - 版本6.0.0
我正在开发一个带有可插拔插件的工作流程应用程序。
在我的解决方案中,我有一个NServiceBus主机程序集,我使用NServiceBus.Host.exe进行托管。为防止扫描,我在NServiceBus.Host.exe.config中定义了EndpointConfigurationType。
<appSettings>
<add key="EndpointConfigurationType" value="Libra.Workflow.Host.EndpointConfig, Libra.Workflow.Host" />
</appSettings>
我已经验证过正在使用此配置,因为如果我输入了一些未知类型,我会收到错误,并且因为在发生任何扫描之前,我会将EndpointConfig类实例化。
在本课程的Customize方法中,我添加了
public void Customize(BusConfiguration cfg)
{
cfg.AssembliesToScan(AllAssemblies.Matching("Libra.Workflow.Messages.dll"));
...
}
现在当我运行这个项目时,我收到一个错误,因为NServiceBus正在扫描所有程序集并且做了System.AddIn的性质,一些程序集无法扫描!
此扫描发生在Libra.Workflow.Host实例化之后,但在调用Customize方法之前。以下是此扫描的调用堆栈:
at NServiceBus.Hosting.Helpers.AssemblyScanner.ScanAssembly(String assemblyPath, AssemblyScannerResults results) in C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Hosting\Helpers\AssemblyScanner.cs:line 153
at NServiceBus.Hosting.Helpers.AssemblyScanner.GetScannableAssemblies() in C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Hosting\Helpers\AssemblyScanner.cs:line 63
at NServiceBus.GenericHost..ctor(IConfigureThisEndpoint specifier, String[] args, List`1 defaultProfiles, String endpointName, IEnumerable`1 scannableAssembliesFullName) in c:\BuildAgent\work\a3de8759ee491634\src\NServiceBus.Hosting.Windows\GenericHost.cs:line 33
at NServiceBus.Hosting.Windows.WindowsHost..ctor(Type endpointType, String[] args, String endpointName, IEnumerable`1 scannableAssembliesFullName) in c:\BuildAgent\work\a3de8759ee491634\src\NServiceBus.Hosting.Windows\WindowsHost.cs:line 21
at NServiceBus.Hosting.Windows.HostServiceLocator.DoGetInstance(Type serviceType, String key) in c:\BuildAgent\work\a3de8759ee491634\src\NServiceBus.Hosting.Windows\HostServiceLocator.cs:line 31
at Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) in c:\Home\Chris\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 49
我得到的错误信息是:
Could not enumerate all types for
'C:\msc\Trunk\Libra.Workflow\Build\Libra.Workflow.Host\AddIns\Libra.Workflow\Libra.Workflow.Processors.dll'
为什么NServiceBus会扫描此DLL,如何防止它?
注意:由于这是一个AddIn DLL,在Libra.Workflow.Host中也没有对它的引用,也没有任何其他相关的程序集,因此NServiceBus绝对没有理由必须触摸它。
答案 0 :(得分:1)
限制NServiceBus.Host完成的程序集扫描的一种方法是使用/ scansAssemblies开关。一个警告是明确地传递NServiceBus.Core和NServiceBus.Host程序集:
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
scatter(x,y)
此命令将扫描那些NServiceBus程序集和通过EndpointConfigurationType应用程序设置指定的程序集。如果要指定其他程序集(如Libra.Workflow.Messages),可以添加其他/ scansAssemblies开关。
有关详细信息,请参阅此文档页面:http://docs.particular.net/nservicebus/hosting/nservicebus-host/#configuring-the-endpoint-controlling-assembly-scanning-using-the-command-line。