扫描.net dll引用dll
最近升级系统里的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 <
|| r.AssemblyName.Name =="FluentNHibernate" && r.AssemblyName.Version.Major <
) .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);
}
}
}
}
}
扫描.net dll引用dll的更多相关文章
- .Net中使用aliases让相同命名空间的dll引用共存
有些不得已的时候,我们需要同时在代码中使用某个dll的不同版本.比如用低版本的dll中的方法导出数据,然后使用高版本的方法导入数据来实现数据的升级. 又或者需要同时使用第三方的dll不同版本.如何使它 ...
- 关于.NET(c#)引用Dll后,找不到命名空间的问题
最近做了一个Silverlight项目,一个类库引用DLL后,找不到命名空间.于是各种google,方法如下: 1.类库与DLL的目标框架不一致: 2.删除obj下文件和清空bin下文件: 3.重装系 ...
- Noesis.Javascript.dll 引用时报错“找不到指定的模块”
Could not load file or assembly 'Noesis.Javascript.dll' or one of its dependencies. 找不到指定的模块. 通过反编译发 ...
- vs2010生成Dll文件并引用dll(C#)
1.创建新C#控制台应用程序,项目命名createBll,打开Program.cs重命名为TestA(可以不重命名)并修改代码,如图: 写好后,可以写其它的类.cs文件 2.完成后,点击菜单栏的“项目 ...
- C#动态引用DLL的方法
C#编程中,使用dll调用是经常的事,这样做的好处是非常多的,比如把某些功能封装到一个dll中,然后主程序动态调用这个dll. 废话不多说,举例说明如下. 首先,我们需要封装一个dll,vs2008下 ...
- 关于ASP .Net Core 引用dll 一
一:ASP.Net Core 引用dll文件,不可以直接引用,必须在NuGet中引用才行. 二:如果想引用自己的dll文件,则需要注册NeGet账号,获取到API Key 才行,还需要下载NuGet安 ...
- WPF 引用DLL纯图像资源包类库中的图片
原文:WPF 引用DLL纯图像资源包类库中的图片 1.建立WPF应用程序 过程略. 2.创建类库项目(图片资源包) 创建图片资源类库项目MyImages,删除 ...
- 在SQL Server引用dll的流程
原文:在SQL Server引用dll的流程 在SQL Server中引用dll分为两个步骤 1.创建一个dll文件 2.把dll文件放进SQL Server的程序集中.然后定义一个Function, ...
- asp.net 如何引用dll
这要看你引用dll文件是什么文件,是单纯的类库还是外部或自定义控件dll文件. 如果是类库dll文件,引用的步骤是这样的:在解决方案管理器中,选中要添加引用的项目或网站-右击-添加引用-选择要添加的d ...
随机推荐
- 解决FPDF报错:FPDF error: Not a JPEG file / FPDF error: Not a PNG file
最近有个项目需要用到FPDF,但是输出的时候报错: FPDF error: Not a JPEG file: http://***/data/attachment/forum/201603/19/10 ...
- Review PHP设计模式之——注册模式
注册模式: class DbConnections{ var $_store = array(); public function isValid($key) { return isset($this ...
- sqlsever2008及以上各个安装包的说明
LocalDB (SqlLocalDB)LocalDB 是 Express 的一种轻型版本,该版本具备所有可编程性功能,但在用户模式下运行,并且具有快速的零配置安装和必备组件要求较少的特点.如果您需要 ...
- win系统一键安装JDK和Tuxedo
@echo off title JDK和tuxedo环境变量设置 color 0a set /p inputTUX= [请输入你要设置的tuxedo的安装目录:] if /i "%input ...
- 【非原】c语言之声明和定义的区别
原创地址:http://www.cnblogs.com/haore147/p/3647466.html 什么是定义?什么是声明?它们有何区别? 举个例子: 1 2 A)int i; B)extern ...
- 【BZOJ 2654】tree
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- Shiro 缓存失效以后的一个问题
shiro 1.2.2和1.2.3 为shiro设置了缓存,但是当服务器运行几个小时后,页面判断 <shiro:hasPermission name="admin"> ...
- CQRS学习——Storage实现(EF+Code First+DynamicReponsitory)[其四]
[这里是的实现,指的是针对各个数据访问框架的一个基础实现] 目标 定义仓储/QueryEntry的基本功能 实现仓储的基本功能,以利于复用 实现一些常用的功能 提供一些便利的功能 目标框架 博主使用的 ...
- 【贪心】 BZOJ 3252:攻略
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 261 Solved: 90[Submit][Status][Discuss] De ...
- spoj 247
不管行列 总是先切割切割费用大的 代码比较烂 ...... #include <iostream> #include <cstdio> #include <cstr ...