[英]How to identify a “reference assembly”?
許多.NET程序集附帶了僅供參考的版本 ,該版本去除了實際代碼,並且僅包含元數據。
例如,我可以在計算機上的幾個位置找到System.Core.dll,其中兩個是:
第一個只有元數據,並且在默認加載上下文中加載它會引發BadImageFormat異常。
System.BadImageFormatException:無法加載文件或程序集'System.Core,版本= 4.0.0.0,區域性=中性,PublicKeyToken = b77a5c561934e089'或其依賴項之一。 參考程序集不應加載以執行 。 它們只能在僅反射的加載器上下文中加載
給定裝配的路徑,是否有可能找出它是否是“參考裝配”?
我可以檢查關鍵字“ Reference Assemblies”的路徑,但這很hacky,如果將程序集復制到其他位置,則無法使用。 如果有幫助,我可以自由地在僅反射的上下文中加載程序集。
我在CoreCLR中找到了這段代碼dotnet / coreclr /.../ pefile.inl ,該代碼通過我認為是System.Runtime.CompilerServices.ReferenceAssemblyAttribute
標識了一個參考程序集:
if (mdImport->GetCustomAttributeByName(TokenFromRid(1, mdtAssembly),
g_ReferenceAssemblyAttribute,
NULL,
NULL) == S_OK) {
ThrowHR(COR_E_LOADING_REFERENCE_ASSEMBLY, BFA_REFERENCE_ASSEMBLY);
}
我認為完整的CLR也是一樣。
我還沒有嘗試過,但是您可以將程序集加載到僅反射的上下文中,然后檢查它是否具有ReferenceAssemblyAttribute
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.