【发布时间】:2009-12-11 05:14:07
【问题描述】:
depends.exe 工具可以遍历可执行文件所依赖的所有 dll,但如果 DLL 是由 Assembly 类在运行时动态加载的,我如何查看已经加载的 DLL(程序集)?
【问题讨论】:
depends.exe 工具可以遍历可执行文件所依赖的所有 dll,但如果 DLL 是由 Assembly 类在运行时动态加载的,我如何查看已经加载的 DLL(程序集)?
【问题讨论】:
作为快照:
AppDomain.CurrentDomain.GetAssemblies()
当它们发生时:
AppDomain.CurrentDomain.AssemblyLoad
类似:
static void Main()
{
AppDomain.CurrentDomain.AssemblyLoad += AssemblyLoad;
LogCurrent("before");
AnotherMethod();
LogCurrent("after");
}
static void AnotherMethod()
{
// to force stuff to happen
new System.Data.SqlClient.SqlCommand().Dispose();
}
static void LogCurrent(string caption)
{
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(caption + ": " + asm.FullName);
}
}
static void AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
Console.WriteLine("Loaded: " + args.LoadedAssembly.FullName);
}
【讨论】:
AssemblyLoad(object sender, AssemblyLoadEventArgs args) 返回Assembly 并且不 是void?
假设您没有搞乱 AppDomains:
AppDomain.CurrentDomain.GetAssemblies();
【讨论】:
你说你在寻找外部工具?尝试带有 SOS 调试扩展的 WinDbg; http://msdn.microsoft.com/en-us/library/bb190764.aspx。
还有其他可能更易于使用的工具提供相同级别的详细信息。我认为 JetBrains 的人有一个(Resharper)
【讨论】:
fuslogw 可以帮助解决这个问题,它有一个监控所有程序集绑定的选项 http://msdn.microsoft.com/en-us/library/e74a18c4(VS.71).aspx
【讨论】: