스캔.netdll 참조 dll

8591 단어 .net
최근 업그레이드 시스템에 있는 NHibernate는 3.3에서 4까지 프로젝트 프로젝트가 너무 많아요. 한 모듈은 bll,dal,model,web,test,10 몇 개의 모듈로 나뉘는데 60여 dll가 필요해요. 한 번 업그레이드하면 너무 골치 아파요.
번역한 후에 때때로 어떤 dll은 옳은 NHibernate를 인용하지 못하지만 구체적으로 어떤 dll을 말하지 않고 수공으로 하나씩 찾는 것도 매우 번거롭다.나중에 자료를 봤는데 반사로 할 수 있는데,
Assembly.GetReferencedAssemblies() 참조된 dll을 봅니다.
/*

 * User: Peter yu

 * Date: 2015/1/7

 * Time: 10:50

 * 

 */

using System;

using System.Collections.Generic;

using System.Linq;

using System.IO;

using System.Reflection;



namespace SearchBin

{

    

    

    public class RefAssemblyInfo

    {

        public AssemblyName AssemblyName

        {

            get;

            set;

        }

        public Assembly SourceAssembly

        {

            get;

            set;

        }

        

            

    }

    class Program

    {

        public static void Main(string[] args)

        {

        

            List<RefAssemblyInfo> infos = new List<RefAssemblyInfo>();

                

            LoadAssembly( assembly =>

                         {

                             

                             foreach(var name in assembly.GetReferencedAssemblies())

                             {

                                 RefAssemblyInfo refAssemblyInfo = new RefAssemblyInfo();

                                 

                                 refAssemblyInfo.AssemblyName  = name;

                                 refAssemblyInfo.SourceAssembly= assembly;

                                 infos.Add(refAssemblyInfo);

                             }

                     

                             

                         },

                         "*.*.dll",

                         @"D:\projects\ehr10_new_2\Web\bin");

            

            var resultList= infos

                .Where (r=>r.AssemblyName.Name =="NHibernate" && r.AssemblyName.Version.Major <4

                        || r.AssemblyName.Name =="FluentNHibernate" && r.AssemblyName.Version.Major <2

                       )

                

                .OrderBy(r=>r.AssemblyName.Name);

            

            foreach(var item in resultList)

            {

            

                Console.WriteLine("{0},{1}",item.AssemblyName.FullName,item.SourceAssembly.FullName);

                    

            }

            Console.ReadLine();

            

        }

        

        public static void LoadAssembly(

            Action<Assembly> load,

            string pattern ="*.*",

            string path = "",

            Func<string, bool> except = null,

            bool shadow = false)

        {



            string adjustPath = path;

            

          



            DirectoryInfo dirInfo = new DirectoryInfo(adjustPath);

            foreach (FileInfo file in dirInfo.GetFiles(pattern))

            {

                try{

                bool isFilePass = true;

                if (except != null)

                {

                    isFilePass = !except(file.FullName);



                }

              

                if (isFilePass)

                {

                    Assembly assembly;

                    if (!shadow)

                    {

                        assembly = Assembly.LoadFile(file.FullName);

                    }

                    else

                    {

                        string dllName = file.Name.Remove(file.Name.LastIndexOf("."));

                        assembly = Assembly.Load(dllName);

                    }

                    load(assembly);

                }

                }catch(Exception error)

                {

                    Console.WriteLine(error);

                }

            }

        }

    }

}

좋은 웹페이지 즐겨찾기