我已将Microsoft.Owin.Host.SystemWeb添加到现有的Asp.Net Web窗体项目(以使用Azure Active Directory身份验证)并获取
[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 type)+0
System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule模块, Int32 typeToken,RuntimeTypeHandle [] typeInstantiationContext, RuntimeTypeHandle [] methodInstantiationContext)+191
System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, 键入[] genericTypeArguments,Type [] genericMethodArguments)+162
System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord,MetadataImport范围,汇编& lastAptcaOkAssembly, RuntimeModule decoratedModule,MetadataToken decoratedToken, RuntimeType attributeFilterType,Boolean mustBeInheritable,Object [] 属性,IList derivedAttributes,RuntimeType&属性类型, IRuntimeMethodInfo&安培; ctor,布尔& ctorHasParameters,Boolean& isVarArg)+148
System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule,Int32 decoratedMetadataToken,Int32 pcaCount, RuntimeType attributeFilterType,Boolean mustBeInheritable,IList derivedAttributes,Boolean isDecoratedTargetSecurityTransparent)+604 System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly assembly,RuntimeType caType)+144
Owin.Loader.DefaultLoader.SearchForStartupAttribute(字符串 friendlyName,IList1 errors, Boolean& conflict) +189
1个错误)+68
Owin.Loader.DefaultLoader.GetDefaultConfiguration(String friendlyName, IList
Owin.Loader.DefaultLoader.LoadImplementation(String startupName, IList1 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(T& target, 布尔和放大器;初始化,对象& syncLock,Func`1 valueFactory)+137
Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(HttpApplication的 上下文)+172
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr的 appContext,HttpContext上下文,MethodInfo []处理程序)+618
System.Web.HttpApplication.InitSpecial(HttpApplicationState状态, MethodInfo [] handlers,IntPtr appContext,HttpContext context)+172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr的 appContext,HttpContext context)+402
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr的 appContext)+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的任何引用。请注意,Version = 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无法解析MVC或Owin dll。
有人可以建议如何识别哪个属性(以及哪个类)引用PostSharp.Sdk?
我认为自己做的是SearchForStartupAttribute所做的事情 - 扫描自定义属性的程序集并记录所有找到的内容。 有更好/更简单的想法吗?
答案 0 :(得分: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 public Global()
调用了这个类 var loader = new Owin.Loader.Debug.DefaultLoader();
IList<string> errorDetauls = new List<string>();
loader.Load("Startup", errorDetauls);
它告诉我,哪个DLL导致了问题,我删除了引用。 DLL引用旧的未使用的PostSharp库,但直到现在它还没有造成任何伤害。
SearchForStartupAttribute会扫描位于bin文件夹中的所有DLL,并且可以清除任何问题,例如缺少参考DLL。 我已提交了建议"DefaultLoader.SearchForStartupAttribute should be tolerant to unrelated errors"