問題

我需要找到啟動託管程式碼執行的程式集.

 // 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