public AssemblyDetail ExtractFrom(string assemblyFile, DiffConfig config, ref ConcurrentQueue <string> deleteFileList) { Assembly assembly; _assemblyFile = assemblyFile; _config = config; // Handle standard and .winmd resolve events AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += CurrentDomain_ReflectionOnlyAssemblyResolve; WindowsRuntimeMetadata.ReflectionOnlyNamespaceResolve += WindowsRuntimeMetadata_ReflectionOnlyNamespaceResolve; try { if (config.UseReflectionOnlyContext) { Log.Info("Loading assembly {0} (ReflectionContext)", assemblyFile); assembly = Assembly.ReflectionOnlyLoadFrom(assemblyFile); } else { Log.Info("Loading assembly {0}", assemblyFile); assembly = Assembly.LoadFrom(assemblyFile); } var loader = new AssemblyLoader(assembly, deleteFileList); loader.CreateDlls(Path.GetDirectoryName(Path.GetFullPath(assemblyFile))); return(new AssemblyDetail(assembly)); } catch (Exception ex) { var errMessage = ex.GetNestedExceptionMessage(); Log.Error(errMessage); throw new Exception(errMessage); } finally { AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve -= CurrentDomain_ReflectionOnlyAssemblyResolve; WindowsRuntimeMetadata.ReflectionOnlyNamespaceResolve -= WindowsRuntimeMetadata_ReflectionOnlyNamespaceResolve; } }