From 4df23c22218d4638dfbd63e40f2ba3144aae1824 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 8 Dec 2010 20:07:58 -0800 Subject: [PATCH] Tweak assembly loading policy one more We have this in Orchard.Setup.csproj: False ..\..\..\..\lib\autofac\Autofac.dll However, version of autoface we are using is not 2.1.13.813. This means that, even if the full assembly name is specified in the csproj file, we still need to lookup the assembly by short name if we can't find it. --HG-- branch : dev --- src/Orchard/Environment/IAssemblyLoader.cs | 30 ++++++++++++++-------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/Orchard/Environment/IAssemblyLoader.cs b/src/Orchard/Environment/IAssemblyLoader.cs index 60705a46d..9a63f6bd6 100644 --- a/src/Orchard/Environment/IAssemblyLoader.cs +++ b/src/Orchard/Environment/IAssemblyLoader.cs @@ -26,31 +26,39 @@ namespace Orchard.Environment { return _loadedAssemblies.GetOrAdd(this.ExtractAssemblyShortName(assemblyName), shortName => LoadWorker(shortName, assemblyName)); } catch (Exception e) { - Logger.Warning(e, "Error loading assembly '{0}'", assemblyName); + Logger.Error(e, "Error loading assembly '{0}'", assemblyName); return null; } } private Assembly LoadWorker(string shortName, string fullName) { - // Try loading the assembly with regular fusion rules first (common case) - Assembly result = LookupFusion(fullName); + Assembly result; + + // Try loading with full name first (if there is a full name) + if (fullName != shortName) { + result = LookupFusion(shortName); + if (result != null) + return result; + } + + // Try loading with short name + result = LookupFusion(shortName); if (result != null) return result; - // If short assembly name, try to figure out the full assembly name using - // a policy compatible with Medium Trust. - if (shortName == fullName) { - var resolvedName = _assemblyNameResolvers.Select(r => r.Resolve(shortName)).Where(f => f != null).FirstOrDefault(); - if (resolvedName != null) - return Assembly.Load(resolvedName); + // Try resolving the short name to a full name + var resolvedName = _assemblyNameResolvers.Select(r => r.Resolve(shortName)).Where(f => f != null).FirstOrDefault(); + if (resolvedName != null) { + return Assembly.Load(resolvedName); } + // Try again so that we get the exception this time return Assembly.Load(fullName); } - private static Assembly LookupFusion(string fullName) { + private static Assembly LookupFusion(string name) { try { - return Assembly.Load(fullName); + return Assembly.Load(name); } catch { return null;