簡體   English   中英

.Net中的執行上下文和僅反射上下文是什么?

[英]What are execution context and reflection-only context in .Net?

我很難理解.Net中的概念執行上下文僅反射上下文 據我了解,這是加載程序集的兩種不同方式,但是我無法明確定義它們。

關於執行上下文,我能夠找到msdn上ExecutionContext的文檔以及有關僅反射上下文的信息,只是如何將程序集加載到其中。

有人可以提供這兩個概念的描述嗎?

.NET程序集包含許多內容。 通常,它們包含類型(類等)和元數據(有關這些類型的信息,等等)。

您可以使用反射訪問元數據。

如果您對元數據感興趣,而不對實際使用程序集中的類型感興趣,則可以在僅反射的上下文中加載該程序集。 這使您可以加載和檢查程序集元數據,但實際上不能實例化該程序集的類型。

關於這一切的一個很好的資源是Jeffrey Richter通過C#編寫的CLR 有關一些簡短信息,請參見《 MSDN博客:僅反射程序集加載》

該框架文檔也是一個不錯的閱讀:公共語言運行時中的匯編->匯編內容

通常,靜態程序集可以包含四個元素:

  • 程序集清單,其中包含程序集元數據。

  • 鍵入元數據。

  • 實現類型的Microsoft中間語言(MSIL)代碼。

  • 一組資源。

以及如何:將程序集加載到僅反射的上下文中

僅反射加載上下文使您可以檢查為其他平台或其他版本的.NET Framework編譯的程序集。 加載到此上下文中的代碼只能進行檢查; 它無法執行。 這意味着無法創建對象,因為無法執行構造函數。 由於無法執行代碼,因此不會自動加載依賴項。 如果需要檢查它們,則必須自己加載它們。

因此,僅反射上下文實際上不是一個不同的進程,一個線程或其他任何東西,而只是一種加載程序集而不在其中加載代碼或依賴項的方式。 代表已加載程序集的Assembly類實例將使用其Assembly.ReflectionOnly屬性進行標記。

它只是加載類型元數據 ,因此您可以檢查程序集中的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM