2016-03-08 3 views
1

NServiceBus.dll - Version 5.2.9 & NServiceBus.Host - Версия 6.0.0NServiceBus - Сканирование всех узлов

Я занимаюсь разработкой приложения рабочего процесса с подключаемыми. Расширениями

В моем решении у меня есть хост-узел NServiceBus, который я размещаю с помощью NServiceBus.Host.exe. Чтобы предотвратить сканирование, я определил EndpointConfigurationType в NServiceBus.Host.exe.config.

<appSettings> 
<add key="EndpointConfigurationType" value="Libra.Workflow.Host.EndpointConfig, Libra.Workflow.Host" /> 
</appSettings> 

Я проверил, что эта конфигурация используется, потому что если я ставлю некоторые неизвестный тип я получаю сообщение об ошибке, а также потому, что мне EndpointConfig класс инстанциируется до наступления любого сканирования.

В способе адаптации этого класса я добавил

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

Вам нужно добавить зависимости Libra.Workflow.Processors.dll к сканированию сборки? –

+0

Вещь с надстройками заключается в том, что некоторые из их зависимостей расположены в другом месте, а точнее в подпапках для хоста. Когда я создаю надстройку, я ссылаюсь на AddInView, но я устанавливаю Copy Local = False, поэтому AddInView.dll не попадает в папку AddIn. структура, как это:.. '\ AddIns \ Libra.Workflow \ Libra.Workflow.Processors.dll' ' \ AddInViews \ Libra.Workflow.Processors.Pipeline.AddInView.dll' Это второй длл это зависимость, которую сканер не может найти.Причина, по которой он не включен в AddIn, состоит в том, что все надстройки используют этот же AddInView.dll –

+0

. Однако я нашел временное решение, но очень хотел бы остановить NServiceBus от сканирования. Чтобы обойти эту проблему, чтобы добавить дополнительную подпапку в узел зондирования в файле .config '' '' ' <зондировании privatePath =» AddInSideAdapters; AddInViews, контрактов, HostSideAdapters "/>' ' ' ' ' –

ответ

1

Один из способов ограничения монтажного сканирования, выполняемого 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.

+0

Спасибо, что мне нужно, это работает как в режиме .exe, так и в режиме NTService. Знаете ли вы, есть ли какие-либо основные сборки, которые я должен добавить, например, NServiceBus.Core? –

+0

Вы также должны указать любую используемую сборку расширения. Например, если вы используете транспорт, отличный от MSMQ, вы должны добавить транспортную сборку. Дополнительную информацию о монтажном сканировании см. В этом документе: http://docs.particular.net/nservicebus/hosting/assembly-scanning#controlling-the-assemblies-to-scan. –

+0

Еще раз спасибо. Именно то, что мне нужно. –