我正在订阅AppDomain.AssemblyLoaded事件,并希望知道从哪个程序集加载了所请求的(当前正在加载的)程序集。
如果程序集A包含对Assembly.Load(AssemblyB)的调用,我想在运行时确定程序集A导致加载程序集B.
答案 0 :(得分:0)
这将为您提供引用程序集,这有点接近。我不确定是否可以获得更多细节。
static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(MyAssemblyLoadEventHandler);
System.Data.DataColumn d = new System.Data.DataColumn();
Console.ReadLine();
}
static void MyAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args)
{
Console.WriteLine("ASSEMBLY LOADED: " + args.LoadedAssembly.FullName);
string loadedAssemblyFullName = args.LoadedAssembly.FullName;
foreach (System.Reflection.Assembly parent in AppDomain.CurrentDomain.GetAssemblies())
{
System.Reflection.AssemblyName[] referencedAssemblies = parent.GetReferencedAssemblies();
string[] referencedFullNames = (from r in referencedAssemblies select r.FullName).ToArray();
if (referencedFullNames.Contains(loadedAssemblyFullName))
{
Console.WriteLine(System.IO.Path.GetFileName(args.LoadedAssembly.CodeBase) +
" was referenced by " +
System.IO.Path.GetFileName(parent.CodeBase));
}
}
}
输出:
ASSEMBLY LOADED:System.Numerics,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
System.Numerics.dll由System.Core.dll引用
System.Data.com引用了System.Numerics.dll
(编辑删除了之前无用的答案)