private static void RegisterAssembly(Assembly assembly) { AssemblyName[] refAsm = new AssemblyName[0]; try { refAsm = assembly.GetReferencedAssemblies(); } catch { } if (NeedProcess(assembly) && (assembly == typeof(SPModel).Assembly || refAsm.Any(v => AssemblyName.ReferenceMatchesDefinition(v, SelfAssemblyName)))) { bool requireLock = !enteredLock; if (requireLock) { Monitor.Enter(syncLock); enteredLock = true; } try { RegisterAssemblyRecursive(assembly); } finally { if (requireLock) { enteredLock = false; Monitor.Exit(syncLock); } } } }