NServiceBus.dll - バージョン 5.2.9 & NServiceBus.Host - バージョン 6.0.0
プラグ可能なアドインを使用してワークフロー アプリケーションを開発しています。
私のソリューションには、NServiceBus.Host.exe を使用してホストする NServiceBus ホスト アセンブリがあります。スキャンを防ぐために、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 がそれに触れなければならない理由はまったくありません。