Замок Виндзор 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). Более подробную информацию можно найти здесь:

https://github.com/castleproject/Windsor/issues/69

Другие вопросы по тегам