[英]Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context
[英]What are execution context and reflection-only context in .Net?
.NET程序集包含許多內容。 通常,它們包含類型(類等)和元數據(有關這些類型的信息,等等)。
您可以使用反射訪問元數據。
如果您只對元數據感興趣,而不對實際使用程序集中的類型感興趣,則可以在僅反射的上下文中加載該程序集。 這使您可以加載和檢查程序集元數據,但實際上不能實例化該程序集的類型。
關於這一切的一個很好的資源是Jeffrey Richter通過C#編寫的CLR 。 有關一些簡短信息,請參見《 MSDN博客:僅反射程序集加載》 。
該框架文檔也是一個不錯的閱讀:公共語言運行時中的匯編->匯編內容 :
通常,靜態程序集可以包含四個元素:
程序集清單,其中包含程序集元數據。
鍵入元數據。
實現類型的Microsoft中間語言(MSIL)代碼。
一組資源。
僅反射加載上下文使您可以檢查為其他平台或其他版本的.NET Framework編譯的程序集。 加載到此上下文中的代碼只能進行檢查; 它無法執行。 這意味着無法創建對象,因為無法執行構造函數。 由於無法執行代碼,因此不會自動加載依賴項。 如果需要檢查它們,則必須自己加載它們。
因此,僅反射上下文實際上不是一個不同的進程,一個線程或其他任何東西,而只是一種加載程序集而不在其中加載代碼或依賴項的方式。 代表已加載程序集的Assembly
類實例將使用其Assembly.ReflectionOnly
屬性進行標記。
它只是加載類型元數據 ,因此您可以檢查程序集中的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.