2012-04-04 80 views
2

Assembly.GetTypes()在存在無法加載的類型時拋出ReflectionTypeLoadException。Assembly.GetTypes() - 獲取未能加載的類型

該異常具有列出成功加載的類型的Types []屬性,以及列出未能加載的類型的異常的LoaderExceptions []屬性。

我的問題:我如何獲得對應於LoaderExceptions的類型?

編輯:我實際上尋找名稱未能加載的類型。對不起,有任何困惑。

+0

您將必須解決LoaderExceptions。他們是什麼? – 2012-04-04 17:28:58

+0

你看過這個http://stackoverflow.com/questions/2658275/c-sharp-assembly-gettypes-reflectiontypeloadexception - 這似乎是一個奇怪的錯誤,你在做什麼,組裝來自哪裏,是你的還是第三方等等。你是否嘗試過反射鏡或類似物。 – NSGaga 2012-04-04 18:27:08

+0

LoaderExceptions在這種情況下是FileLoadExceptions,它只發生在我無權訪問的最終用戶計算機上。 FileLoadException在第三方DLL上。我實際上必須做一個生產版本,讓這個人運行它,並失敗只是爲了獲得更多的日誌,所以我可以調試。爲了獲得這些信息已經有三輪了。 – 2012-04-17 15:04:32

回答

4

這是不可能的。 CLR未能創建Type對象,這就是爲什麼您得到了一組LoaderExceptions。根本沒有Type對象來描述加載失敗的Type

+0

不夠公平,我應該把它寫成:「如何獲取未能加載的類型的類型名稱?」在這種情況下,LoaderExceptions有FileLoadExceptions,它有一個關聯的融合日誌,但唉,沒有什麼實際上說「類型Peters.BrokenClass」由於此異常而未能加載:..只是該程序集Something.From.MS.dll無法加載... – 2012-04-17 14:53:23

+0

@PeterDrier這是一個令人沮喪的異常工作。我通常只是直接使用fuslogvw來追蹤錯誤,因爲它偶爾會有更多有用的信息http://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.71).aspx – JaredPar 2012-04-17 14:54:55

+0

如果只有我有權訪問有問題的機器。它在外地,用戶不是我們更快樂的一個。唯一真正的選擇是編寫額外的調試代碼,並將足夠的結果記錄回服務器,以便有希望找出問題。 – 2012-04-17 15:06:01

0

當您從某個位置加載的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; 
     } 
} 
相關問題