2017-01-22 2 views
1

Я добавил Microsoft.Owin.Host.SystemWeb в проект веб-форм существующих Asp.Net (для использования Azure аутентификации Active Directory) и получитьОшибка OwinBuilder.GetAppStartup «Не удалось загрузить файл или сборку» - как найти, где вызывается сборка?

[FileNotFoundException: Не удалось загрузить файл или сборку «PostSharp .Sdk, Version = 2.1.0.0, Culture = neutral, PublicKeyToken = b13fd38b8f9c99d7 'или одна из его зависимостей. Система не может найти указанный файл.]
System.ModuleHandle.ResolveType (модуль RuntimeModule, Int32 typeToken, IntPtr * typeInstArgs, Int32 typeInstCount, IntPtr * methodInstArgs, Int32 methodInstCount, тип ObjectHandleOnStack) +0
System.ModuleHandle .ResolveTypeHandleInternal (RuntimeModule модуль, Int32 typeToken, RuntimeTypeHandle [] typeInstantiationContext, RuntimeTypeHandle [] methodInstantiationContext) +191
System.Reflection.RuntimeModule.ResolveType (Int32 metadataToken, Тип [] genericTypeArguments, тип [] genericMethodArguments) +162
System.Reflectio n.CustomAttribute.FilterCustomAttributeRecord (CustomAttributeRecord caRecord, MetadataImport сфера, сборка & lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, булева mustBeInheritable, Object [] атрибуты, IList derivedAttributes, RuntimeType & AttributeType, IRuntimeMethodInfo & CTOR, Boolean & ctorHasParameters, булевы & isVarArg) +148
System.Reflection.CustomAttribute.GetCustomAttributes (RuntimeModule decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, булева mustBeInheritable, IList derivedAttributes, булева isDecoratedTargetSecurityTransparent) +604 System.Reflection.CustomAttribute.GetCustomAttributes (RuntimeAssembly сборки, RuntimeType caType) +144
Owin.Loader.DefaultLoader.SearchForStartupAttribute (Строка FriendlyName, IList 1 errors, Boolean& conflict) +189
Owin.Loader.DefaultLoader.GetDefaultConfiguration(String friendlyName, IList
1 ошибки) +68
Owin.Loader.DefaultLoader.LoadImplementation (Строка startupName, IList 1 errorDetails) +89 Owin.Loader.DefaultLoader.Load(String startupName, IList 1 errorDetails): +30
Microsoft.Owin.Host.SystemWeb.OwinBuilder.GetAppStartup() +165
Microsoft.Owin.Host .SystemWeb.OwinHttpModule .InitializeBlueprint() +37 System.Threading.LazyInitializer.EnsureInitializedCore (Т & мишени, Логическое & инициализирован, объект & SyncLock, Func`1 valueFactory) +137
Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init (HttpApplication контекста) +172
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (контекст IntPtr контекст приложение, HttpContext, MethodInfo [] обработчики) +618
System.Web.HttpApplication.InitSpecial (HttpApplicationState состояние, MethodInfo [] обработчики, IntPtr контекст приложение , Контекст HttpContext) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, контекст HttpContext) +402
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr контекст приложение) +343

Как я понимаю Owin.Loader.DefaultLoader.SearchForStartupAttribute использует отражение и не может загружаться некоторым атрибут, но не сообщает, какой атрибут сканирует и где он находится.

Наш проект использует PostSharp для кэширования и регистрации, но (насколько я знаю) мы используем version = "4.3.21", а один атрибут относится к "3.0.26.9", но в любом случае должен быть перенаправлен на 4.3.21 из-за

<bindingRedirect oldVersion="0.0.0.0-4.3.21.0" newVersion="4.3.21.0" /> 

Я искал исходный код для «PostSharp.Sdk», но не нашел ссылок.

Быстрый просмотр в демонтаже с использованием JetBrain DotPeek также не показывал ссылок на PostSharp.Sdk. Обратите внимание, что версия = 2.1 очень старая.

Есть ссылки http://support.sharpcrafters.com/discussions/problems/2275-postsharp-is-not-compatible-with-microsoftowinsecurity-latest-version и issue with PostSharp cannot find assembly for system.web.mvc, version=3.0.0.0 when no projects reference it, которые выглядят одинаково, но они имеют противоположную проблему: PostSharp не смог разрешить DLL MVC или Owin.

Может ли кто-нибудь предложить, как определить, какой атрибут (и на каком классе) ссылается на PostSharp.Sdk?

Я считаю самим, что ищет SearchForStartupAttribute -scan сборка (-ий) для пользовательских атрибутов и регистрирует все найденное. Любые лучшие/более простые идеи?

+0

Любая удача в ex.InnerException? – Zen

ответ

1

Благодаря открытым исходным кодом я нашел исходный код https://katanaproject.codeplex.com/SourceControl/latest#src/Owin.Loader/DefaultLoader.cs и скопировать класс локально (вместе с парой внутренних классов, используемых DefaultLoader). Текущий код игнорирует только CustomAttributeFormatException, Я трассировку, а затем игнорировать все ошибки

private Tuple<Type, string> SearchForStartupAttribute(string friendlyName, IList<string> errors, ref bool conflict) 
foreach (var assembly in _referencedAssemblies) 
      { 
       object[] attributes; 
       try 
       { 
        attributes = assembly.GetCustomAttributes(inherit: false); 
       } 
      // catch (CustomAttributeFormatException) 
      // { 
      //  continue; 
      // } 
       catch (Exception exc) 
       { 
        string message = "In " + assembly.ToString(); 
        System.Diagnostics.Trace.WriteLine(message + " " + exc.ToString()); 
        continue; 
       } 

Я называется класс от global.asax общественного Global()

var loader = new Owin.Loader.Debug.DefaultLoader(); 
    IList<string> errorDetauls = new List<string>(); 
    loader.Load("Startup", errorDetauls); 

Он показал мне, что DLL вызвало проблема, и я удалил ссылку. DLL ссылалась на старую неиспользуемую библиотеку PostSharp, но до сих пор она не наносила никакого вреда.

SearchForStartupAttribute проверяет, все DLL-файлы, расположенные в папке bin, и хрупкие по любым вопросам, таким как отсутствующие ссылочные DLL-файлы. Я подал предложение "DefaultLoader.SearchForStartupAttribute should be tolerant to unrelated errors"

+0

Спасибо за объяснение причин. –

Смежные вопросы