Abh*_*eet 45 c# assemblies .net-assembly
我有一个DLL集合(比如20).如何找出一个特定DLL(比如DLL A)所依赖的所有DLL?
Jon*_*eet 46
如果您的意思是编程,请使用Assembly.GetReferencedAssemblies
.
您可以递归地使用它来查找所需的所有程序集.(所以你找到X的依赖关系,然后是依赖关系的依赖关系等)
Lor*_*tté 13
由于问题标记为"C#",我假设您正在讨论托管dll(程序集).在这种情况下,dependencywalker没用.如果你想用程序做到这一点,好的是JetBrians的dotPeek和RedGate的Reflector.或者您甚至可以在Visual Studio中使用对象检查器.
然而,它可能是一个漫长的过程,也很麻烦.我会写一个简短的C#程序/ F#脚本Assembly.GetReferencedAssemblies
,正如Jon提到的那样.
如果您想要使用程序(C#代码)检查本机DLL依赖项,则必须检查PE文件(MS dll和exe文件格式)及其IAT(导入地址表).不容易,但并非不可能......
我将开始在这里MSDN和这里了解PE的部分,并使用托管库读它(有很多,其中包括一些从Mono项目(我在想塞西尔,它应该与本地二进制工作太);在过去,我用这一个从良约翰·高夫.
您可以使用依赖性walker http://www.dependencywalker.com来解决这个问题.请注意x32和x64之间的区别.
Dependency Walker是一个免费的实用程序,可以扫描任何32位或64位Windows模块(exe,dll,ocx,sys等),并构建所有相关模块的分层树形图.
所有答案归功于以前的作者使用Assembly.GetReferencedAssemblies
.这只是一个可以随意使用的C#控制台应用程序,仅适用于.NET程序集.return 0
在您能够检查的程序集上,并在成功时将它们输出到STDOUT.其他所有内容都将return 1
打印出某种错误输出.你可以在这里抓住要点.
using System;
using System.Reflection;
using System.IO;
namespace DotNetInspectorGadget
{
class DotNetInspectorGadget
{
static int Main(string[] args)
{
if(args.GetLength(0) < 1)
{
Console.WriteLine("Add a single parameter that is your" +
" path to the file you want inspected.");
return 1;
}
try {
var assemblies = Assembly.LoadFile(@args[0]).GetReferencedAssemblies();
if (assemblies.GetLength(0) > 0)
{
foreach (var assembly in assemblies)
{
Console.WriteLine(assembly);
}
return 0;
}
}
catch(Exception e) {
Console.WriteLine("An exception occurred: {0}", e.Message);
return 1;
} finally{}
return 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
call %cd%\dotnet_inspector_gadget.exe C:\Windows\Microsoft.NET\assembly\GAC_64\Microsoft.ConfigCI.Commands\v4.0_10.0.0.0__31bf3856ad364e35\Microsoft.ConfigCI.Commands.dll
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a