最近在做一个上传软件,上传前选择Debug下的文件,当选择的文件是XXX.exe时,程序会识别此文件,然后找出此文件的所有依赖项(例如XXX.dll),并把这些依赖项读取到一个TextBox控件中,我百度和谷歌都试过了,很难找到能帮助我开启思路的解释,于是就来这里求解了,希望各位大神帮下我解决这个棘手问题。最好有代码解释,我用的是C#和VS2010。感激不尽!C#依赖项
解决方案 »
- 求高手,我这里想把一串数字装进一个文本框里。
- 小票打印如何固定欄寬
- 用devenv命令行编译时,无论是否指定out参数都不能在屏幕上显示详细信息、但同样的命令在另一台机器上可以?
- 问一下简单xml取值问题
- c#.net web调试出错
- 急问:HttpWebRequest.GetResponse() 在winform中可以而在asp.net中访问远程服务器却不可以?
- C#里如何实现哈希表里的数据的输出(在线等,及时结帖)
- 本团队找志同道合的朋友一起开发搜索程序(c# OR java)!提供我们写好的一部分搜索代码给大家研究!
- 问个简单的问题
- 用GDI绘图的问题?
- PrintPreviewDialog 会被打印两次的原因?
- 各位你们是怎样用存储过程处理插入多行记录的?
这个我下载了,好像不是查找所有依赖项的,我选择exe文件,它给我返回了一些函数。
private static StringBuilder _resultString = new StringBuilder();
static void Main(string[] args)
{
Assembly mainExe = Assembly.LoadFrom(@"D:\DEMO测试\ConsoleApplication3\WindowsFormsApplication1\bin\Debug\1.exe");
BuildReferencesTree(mainExe, 1);
Console.WriteLine(_resultString);
Console.Read();
} private static void BuildReferencesTree(Assembly assembly, Int32 index)
{
if (index >= 5)
{
return;
}
AssemblyName[] assemblyNames = assembly.GetReferencedAssemblies();
foreach (var item in assemblyNames)
{
_resultString.AppendLine((new String(' ', (index - 1) * 3)) + item.Name);
BuildReferencesTree(Assembly.Load(item), index + 1);
}
}
先谢谢你,这个方法的确可以,但也把System的和一些文件夹里没有的都查找出来了。而且会出现:
未能加载文件或程序集“XXX.Object, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
XXX这个文件的确存在,至于它的依赖项就不知道了,估计不是放在同一个文件夹的,所以找不全。但即使这样exe一样可以正常运行,郁闷。
先谢谢你,这个方法的确可以,但也把System的和一些文件夹里没有的都查找出来了。而且会出现:
未能加载文件或程序集“XXX.Object, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
XXX这个文件的确存在,至于它的依赖项就不知道了,估计不是放在同一个文件夹的,所以找不全。但即使这样exe一样可以正常运行,郁闷。
dll不一定都是在这个目录下的,很多系统的dll都在GAC(全局程序集缓存)中,这一类一般是不用你去关心的,因为安装.NET FK的时候系统就会把这一部分放GAC里面。
你可以把一些常见的系统的dll给排除出去,不去处理就行了。