问题

我需要找到启动托管代码执行的程序集.

 // using System.Reflection;
Assembly entryAssembly = Assembly.GetEntryAssembly();
 

这似乎是走的方法,但 MSDN 引用页面的Assembly.GetEntryAssembly 表示这个方法“从未托管的代码调用时返回null”.

在这种情况下,我想知道哪个程序集是由非托管代码调用的.

有没有可靠的方法来做到这一点,即总是返回一个非non-null Assembly引用?

  最佳答案

到目前为止我能想到的最好的是以下内容,它应该在单线程场景中工作:

 // using System.Diagnostics;
// using System.Linq; 
Assembly entryAssembly = new StackTrace().GetFrames().Last().GetMethod().Module.Assembly;
 

(上面的片段优化是为了便于理解,而不是为了执行速度或内存效率。)

  相同标签的其他问题

c#.netsystem.reflectionentry-point