private Mod _loadModStatic(TypeDefinitionCollection types, String filepath) { ResolveEventHandler resolver = new ResolveEventHandler(CurrentDomainOnAssemblyResolve); AppDomain.CurrentDomain.AssemblyResolve += resolver; Assembly modAsm = null; try { modAsm = Assembly.LoadFile(filepath); } catch (BadImageFormatException) { AppDomain.CurrentDomain.AssemblyResolve -= resolver; return null; } Type modClass = (from _modClass in modAsm.GetTypes () where _modClass.InheritsFrom (typeof(ScrollsModLoader.Interfaces.BaseMod)) select _modClass).First(); //no mod classes?? if (modClass == null) { AppDomain.CurrentDomain.AssemblyResolve -= resolver; return null; } //get hooks MethodDefinition[] hooks = null; try { hooks =(MethodDefinition[]) modClass.GetMethod ("GetHooks").Invoke (null, new object[] { types, SharedConstants.getExeVersionInt () }); } catch (Exception e) { Console.WriteLine ("Error executing GetHooks for mod: " + filepath); Console.WriteLine (e); AppDomain.CurrentDomain.AssemblyResolve -= resolver; return null; } TypeDefinition[] typeDefs = new TypeDefinition[types.Count]; types.CopyTo(typeDefs, 0); //check hooks foreach (MethodDefinition hook in hooks) { //type/method does not exists if (hook == null) { Console.WriteLine ("ERROR: GetHooks contains 'null'! "); Console.WriteLine ("=> Disabling " + filepath); AppDomain.CurrentDomain.AssemblyResolve -= resolver; return null; } if ((from type in typeDefs where type.Equals(hook.DeclaringType) //Code above avoids NullReferenceException when hook is null. select type).Count() == 0) { //disable mod Console.WriteLine ("ERROR: Mod hooks unexistant method! " + filepath); AppDomain.CurrentDomain.AssemblyResolve -= resolver; return null; } } //add hooks foreach (MethodDefinition hook in hooks) { ScrollsFilter.AddHook (hook); } //mod object for local mods on ModManager Mod mod = new Mod(); try { mod.id = "00000000000000000000000000000000"; mod.name = (String)modClass.GetMethod("GetName").Invoke(null, null); mod.version = (int)modClass.GetMethod("GetVersion").Invoke(null, null); mod.versionCode = ""+mod.version; mod.description = ""; } catch (Exception e){ Console.WriteLine ("Error getting Name or Version: "); Console.WriteLine (e); AppDomain.CurrentDomain.AssemblyResolve -= resolver; return null; } AppDomain.CurrentDomain.AssemblyResolve -= resolver; return mod; }