public static void ResolveArchitectureAssemblies(IEnumerable <string> assemblyNames)
        {
            foreach (var assemblyName in assemblyNames)
            {
                if (!resolverDescriptors.ContainsKey(assemblyName))
                {
                    var executingAssembly = FindFile(AssemblyReflector.GetBasePath(), Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location));
                    var assemblyDir       = Path.GetDirectoryName(executingAssembly);

                    var a = new AssemblyResolverDescriptor
                    {
                        AssemblyName     = assemblyName,
                        OriginalAssembly = Path.Combine(assemblyDir, assemblyName + ".dll"),
                        X86Assembly      = Path.Combine(assemblyDir, "x86", assemblyName + ".dll"),
                        X64Assembly      = Path.Combine(assemblyDir, "x64", assemblyName + ".dll")
                    };

                    resolverDescriptors.Add(a.AssemblyName, a);

                    if (assemblyDir != null && (File.Exists(a.OriginalAssembly)))
                    {
                        throw new InvalidOperationException(string.Format("Found {0}.dll which cannot exist. "
                                                                          + "Must instead have x86\\{0}.dll and x64\\{0}.dll. Check your build settings.", assemblyName));
                    }
                }
            }
        }
Beispiel #2
0
 public static IEnumerable <MethodInfo> GetExtensionsMethods(this Type type, IEnumerable <Assembly> assemblies = null)
 {
     return
         ((assemblies ?? AssemblyReflector.GetLoadedAssemblies().Where(x => !x.IsDynamic))
          .SelectMany(x => x.GetTypes())
          .Where(x => x.IsClass && !x.IsGenericTypeDefinition &&
                 x.IsSealed && x.IsAbstract && x.GetConstructor(Type.EmptyTypes) == null)
          .SelectMany(x => x.GetMethods(
                          BindingFlags.Static |
                          BindingFlags.Public | BindingFlags.NonPublic))
          .Where(x => x.GetParameters().Length > 0 &&
                 x.IsDefined(typeof(System.Runtime.CompilerServices.ExtensionAttribute), false) &&
                 x.GetParameters().Length > 0)
          .Select(x => new
     {
         Method = x,
         ExtendedType = x.GetParameters().First().ParameterType
     })
          .Where(x =>
                 x.ExtendedType.IsAssignableFrom(type) ||
                 (x.ExtendedType.IsGenericType && type.IsGenericType &&
                  x.ExtendedType.GetGenericTypeDefinition().IsAssignableFromGenericType(type.GetGenericTypeDefinition())
                 ))
          .Select(x => x.Method));
 }