Assembly.GetTypes()在存在無法加載的類型時拋出ReflectionTypeLoadException。Assembly.GetTypes() - 獲取未能加載的類型
該異常具有列出成功加載的類型的Types []屬性,以及列出未能加載的類型的異常的LoaderExceptions []屬性。
我的問題:我如何獲得對應於LoaderExceptions的類型?
編輯:我實際上尋找名稱未能加載的類型。對不起,有任何困惑。
Assembly.GetTypes()在存在無法加載的類型時拋出ReflectionTypeLoadException。Assembly.GetTypes() - 獲取未能加載的類型
該異常具有列出成功加載的類型的Types []屬性,以及列出未能加載的類型的異常的LoaderExceptions []屬性。
我的問題:我如何獲得對應於LoaderExceptions的類型?
編輯:我實際上尋找名稱未能加載的類型。對不起,有任何困惑。
這是不可能的。 CLR未能創建Type
對象,這就是爲什麼您得到了一組LoaderExceptions
。根本沒有Type
對象來描述加載失敗的Type
。
不夠公平,我應該把它寫成:「如何獲取未能加載的類型的類型名稱?」在這種情況下,LoaderExceptions有FileLoadExceptions,它有一個關聯的融合日誌,但唉,沒有什麼實際上說「類型Peters.BrokenClass」由於此異常而未能加載:..只是該程序集Something.From.MS.dll無法加載... – 2012-04-17 14:53:23
@PeterDrier這是一個令人沮喪的異常工作。我通常只是直接使用fuslogvw來追蹤錯誤,因爲它偶爾會有更多有用的信息http://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.71).aspx – JaredPar 2012-04-17 14:54:55
如果只有我有權訪問有問題的機器。它在外地,用戶不是我們更快樂的一個。唯一真正的選擇是編寫額外的調試代碼,並將足夠的結果記錄回服務器,以便有希望找出問題。 – 2012-04-17 15:06:01
當您從某個位置加載的Dll已在您的應用程序或父應用程序中引用時,通常會發生此錯誤。如果Dll已經在引用中,則循環遍歷應用程序的Assemblies
。
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
{
if (asm.ManifestModule.FullyQualifiedName.EndsWith("YourDllName.dll"))
{
foreach (var Type in asm.GetTypes())
{
// Apply your logic here
}
break;
}
}
您將必須解決LoaderExceptions。他們是什麼? – 2012-04-04 17:28:58
你看過這個http://stackoverflow.com/questions/2658275/c-sharp-assembly-gettypes-reflectiontypeloadexception - 這似乎是一個奇怪的錯誤,你在做什麼,組裝來自哪裏,是你的還是第三方等等。你是否嘗試過反射鏡或類似物。 – NSGaga 2012-04-04 18:27:08
LoaderExceptions在這種情況下是FileLoadExceptions,它只發生在我無權訪問的最終用戶計算機上。 FileLoadException在第三方DLL上。我實際上必須做一個生產版本,讓這個人運行它,並失敗只是爲了獲得更多的日誌,所以我可以調試。爲了獲得這些信息已經有三輪了。 – 2012-04-17 15:04:32