Goodspeed

导航

一堆DLL中找一个类

using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Linq;

namespace SampleConsole
{
class Program
{
        static void Main(string[] args)
        {
            string find = "SessionState";
            string dir = @"D:\project\website\XXX\website\XXX.Core\trunk\Lib\Dll";
            new DirectoryInfo(dir)
                .EnumerateFiles("*.dll"SearchOption.AllDirectories)
                .AsParallel()
                .Select(f => f.FullName)
            .Select(p =>
            {
                try
                {
                    return new
                    {
                        Path = p.ToLower().Replace(dir.ToLower(), string.Empty),
                        Assembly = Assembly.LoadFrom(p)
                    };
                }
                catch (BadImageFormatException) { return null; }
            }).Where(x => x != null)
            .Select(x =>
                {
                    try
                    {
                        return new
                        {
                            Path = x.Path,
                            Types = x.Assembly.GetTypes().AsParallel()
                                    .Select(t => t.FullName)
                                    .Where(s => s.IndexOf(find) > -1)
                        };
                    }
                    catch (ReflectionTypeLoadException) { return null; }
                }).Where(x => x != null && x.Types.Count() > 0)
                .ToList()
                .ForEach(x =>
                    Console.WriteLine(x.Path + "\n" + x.Types.Aggregate((a, b) => a + "\n" + b) + "\n\n")
                    );
        }
}
}

posted on 2010-07-28 15:37  Goodspeed  阅读(338)  评论(0编辑  收藏  举报