[英]AppDomain.CurrentDomain.GetAssemblies() throws System.Reflection.ReflectionTypeLoadException when using Sybase
[英]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日志來查看為什么程序集無法加載?
我最后總結說,為序列化和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.