Замок Виндзор WCF и System.TypeLoadException'произошли в mscorlib.dll
У меня есть собственный сервис WCF, и я использую Castle Windsor в качестве DI-контейнера. Я получаю это исключение:
System.TypeLoadException occurred
_HResult=-2146233054
_message=GenericArguments[0], 'System.ServiceModel.ServiceHostBase', on
'Castle.Facilities.WcfIntegration.IChannelFactoryBuilder`1[M]'
violates the constraint of type parameter 'M'.
HResult=-2146233054
IsTransient=false
Message=GenericArguments[0], 'System.ServiceModel.ServiceHostBase', on
'Castle.Facilities.WcfIntegration.IChannelFactoryBuilder`1[M]'
violates the constraint of type parameter 'M'.
ResourceId=0
TypeName=""
InnerException:
Конфигурация контейнера Castle выглядит так:
Container = new WindsorContainer()
.AddFacility<WcfFacility>();
Container.Register(
Component.For<IReportsService>().ImplementedBy<ReportsService>().LifestylePerWcfOperation(),
Component.For<IAdminServices>().ImplementedBy<AdminServices>().LifestylePerWcfOperation(), etc...
Я создаю сервис WCF по этому коду:
host = new DefaultServiceHostFactory().CreateServiceHost(typeof(IAdminServices).AssemblyQualifiedName, new Uri[0]);
host.Open();
Это работает нормально, но если я запускаю в режиме отладки с проверенным параметром "перерыв при возникновении исключения", отладчик всегда останавливается на линии
host = new DefaultServiceHostFactory().CreateServiceHost(typeof(IAdminServices).AssemblyQualifiedName, new Uri[0]);
Я показываю мне исключение, указанное выше.
Я неправильно использую Castle с WCF? Могу ли я избежать этого исключения?
РЕДАКТИРОВАТЬ:
Проблема появляется только в Visual Studio 2013, в 2012 году это нормально.
Я использую эти версии Castle:
Ядро замка - 3.3.0
Castle WcfIntegrationFacility - 3.3.0
Замок Виндзор - 3.3.0
1 ответ
Проблема вызвана недокументированным исключением, выданным Type.MakeGenericType. Исключение выдается в неуправляемом коде. Между Visual Studio 2012 и 2013 нет различий. Разница была вызвана настройками отладки (включил "Просто мой код" в VS 2012). Более подробную информацию можно найти здесь: