Я получаю исключение, когда запускаю единичный тест на контроллере в веб-проекте (ASP.NET web api). Исключение, когда LogManager.GetCurrentClassLogger() контроллера выполняется:MethodAccessException при вызове nlog LogManager.GetCurrentClassLogger()
System.MethodAccessException: Попытка методом «Castle.Proxies.ClaimsPrincipalProxy.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization. StreamingContext) 'для доступа к методу' Castle.DynamicProxy.Internal.TypeUtil.Sort (System.Reflection.MemberInfo []) 'failed
Это приводит к исключению TypeInitializationException в LogManager.GetCurrentClassLogger(). здесь стек вызовов:
на Castle.Proxies.ClaimsPrincipalProxy.GetObjectData (SerializationInfo, StreamingContext) в System.Runtime.Serialization.ObjectCloneHelper.GetObjectData (Object serObj Строковый & TYPENAME, String & assemName, String [] & имен полей, Object [] & FieldValues) на System.AppDomain.get_Evidence() в System.AppDomain.get_Evidence() в System.Configuration.ClientConfigPaths.GetEvidenceInfo (AppDomain AppDomain, струнный ExePath, иая Строка TypeName) в системе .Configuration.ClientConfigPaths.GetTypeAndHashSuffix (AppDomain appDomain, String exePat ч) на System.Configuration.ClientConfigPaths..ctor (String ExePath, Boolean includeUserConfig) на System.Configuration.ClientConfigPaths.GetPaths (String ExePath, Boolean includeUserConfig) в System.Configuration.ClientConfigurationHost.RequireCompleteInit (IInternalConfigRecord запись) в System.Configuration.BaseConfigurationRecord.GetSectionRecursive (String configKey, булева getLkg, булева checkPermission, булева getRuntimeObject, булева requestIsHere, исй результат объекта, ссылка resultRuntimeObject объекта) на System.Configuration.BaseConfigurationRecord.GetSection (Строка configKey) на System.Configuration. ConfigurationManager.GetSection (String sectionName) в NLog.Config.XmlLoggingConfiguration.get_AppConfig() в NLog.LogFactory.get_ Конфигурация() в NLog.LogFactory.GetLogger (LoggerCacheKey cacheKey) в NLog.LogFactory.GetLogger (имя String) на NLog.LogManager.GetCurrentClassLogger()
Update: Проблема происходит, когда модульного тестирования ссылки на проекты NSubstitute. Таким образом, кажется, что существует некоторая опасная комбинация веб-API, NSubstitute и NLog.
Обновление 2: Обнаружено, что расстраивает Nlog в контроллере. Перед вызовом метода контроллера я набор издевался принципал для Thread.CurrentPrincipal:
var principal = Substitute.For<ClaimsPrincipal>();
principal.Identity.Returns(...);
Thread.CurrentPrincipal = principal;
Как можно это исправить?
Вы нашли решение? У меня такое же исключение в моем проекте. В методе клонирования, реализованном во внешней сборке ... – Antiohia