NServiceBus.dll -版本5.2.9和NServiceBus.Host -版本6.0.0
我正在开发一个带有可插入加载项的工作流应用程序。
在我的解决方案中,我有一个NServiceBus主机程序集,我使用NServiceBus.Host.exe托管它。为了防止扫描,我在EndpointConfigurationType中定义了NServiceBus.Host.exe.config。
<appSettings>
<add key="EndpointConfigurationType" value="Libra.Workflow.Host.EndpointConfig, Libra.Workflow.Host" />
</appSettings>
我已经验证了使用此配置的原因是,如果我输入了一些未知类型,就会得到一个错误,还因为me EndpointConfig类在进行任何扫描之前都是实例化的。
在这个类的定制方法中,我添加了
public void Customize(BusConfiguration cfg)
{
cfg.AssembliesToScan(AllAssemblies.Matching("Libra.Workflow.Messages.dll"));
...
}
现在,当我运行这个项目时,我会得到一个错误,因为NServiceBus正在扫描所有程序集,并且对System.AddIn的性质做了一些程序集不能被扫描!
这种扫描是在Libra.Workflow.Host被实例化之后立即进行的,但是在定制方法被称为之前,就会发生。下面是此扫描的调用堆栈:
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要扫描这个动态链接库,我如何防止它?
注意:,因为这是一个AddIn DLL,在Libra.Workflow.Host或任何其他相关程序集中甚至都没有对它的引用,所以NServiceBus绝对没有必要去触摸它。
发布于 2016-03-10 01:33:28
NServiceBus.Host限制组装扫描的一种方法是使用/scannedAssemblies开关。一个警告是显式地传递NServiceBus.Core和NServiceBus.Host程序集:
NServiceBus.Host.exe /scannedAssemblies:"NServiceBus.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c" /scannedAssemblies:"NServiceBus.Host, Version=6.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c"
此命令将扫描那些NServiceBus程序集和通过EndpointConfigurationType应用程序设置指定的程序集。如果希望指定其他程序集(如Libra.Workflow.Messages),则可以添加其他/scannedAssemblies开关。
有关详细信息,请参阅此文档页:http://docs.particular.net/nservicebus/hosting/nservicebus-host/#configuring-the-endpoint-controlling-assembly-scanning-using-the-command-line。
https://stackoverflow.com/questions/35871942
复制相似问题