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>
Я проверил, что эта конфигурация используется, потому что, если я добавлю какой-то неизвестный тип, я получаю сообщение об ошибке, а также потому, что мой класс 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 и как я могу это предотвратить?
Примечание. Поскольку это DLL-библиотека надстройки, на нее даже нет ссылки ни в Libra.Workflow.Host, ни в каких-либо других связанных сборках, поэтому у NServiceBus не должно быть абсолютно никаких причин касаться Это.
.\AddIns\Libra.Workflow\Libra.Workflow.Processors.dll
.\AddInViews\Libra.Workflow.Processors.Pipeline.AddInView.dll
Эта вторая dll является зависимостью, которую сканер не может найти. Причина, по которой он не включен в надстройку, заключается в том, что все надстройки используют одну и ту же AddInView.dll. - person Gunnar Valur Gunnarsson   schedule 09.03.2016<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="AddInSideAdapters;AddInViews;Contracts;HostSideAdapters"/>
</assemblyBinding>
</runtime>
- person Gunnar Valur Gunnarsson   schedule 09.03.2016AssembliesToScan(AllAssemblies.Matching("Libra.Workflow.Messages.dll"));
, но вы говорите, что не хотите, чтобы он сканировал ?? - person Sean Farmar   schedule 09.03.2016