簡體   English   中英

AppDomain.CurrentDomain.GetAssemblies失敗並顯示ReflectionTypeLoadException

[英]AppDomain.CurrentDomain.GetAssemblies fails with ReflectionTypeLoadException

在單元測試期間,我遇到了以下代碼的問題,該代碼要求所有已加載的程序集:

var res = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.ToList();

此代碼失敗,並且ReflectionTypeLoadException具有模式的內部異常

無法加載類型Microsoft.Xml.Serialization.GeneratedAssembly.FOO

其中FOO是我們編碼的一些特定類別。

在上面運行單元測試時會出現問題,使用XDocument類創建XML文檔。

我可能不會想要加載這些代碼生成的類(我猜測Microsoft.Xml.Serialization.GeneratedAssembly。*是生成的代碼。)我只想了解什么是錯誤的。

您應該檢查組件的IsDynamic字段,該字段在.netframework 4及更高版本中可用。

var res = AppDomain.CurrentDomain.GetAssemblies().Where(ass => ass.IsDynamic == false)
.SelectMany(x => x.GetTypes())
.ToList();

你能打開Fusion日志來查看為什么程序集無法加載?

如何在.NET中啟用程序集綁定失敗日志記錄(Fusion)

我最后總結說,為序列化和xmlserialization(以及其他?)生成的運行時代碼的類對我來說是無趣的。 因此以下過濾器有幫助

return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => !x.FullName.StartsWith("Microsoft.GeneratedCode"))
.SelectMany(x => x.GetTypes())
.ToList();

暫無
暫無

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

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