xwr*_*wrs 5 .net c# reflection appdomain
我有一个代码Type.GetType(myTypeName)正在返回的问题,null因为具有该类型的程序集不是当前正在执行的程序集.
我发现这个问题的解决方案是下一个:
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
Type myType = assemblies.SelectMany(a => a.GetTypes())
.Single(t => t.FullName == myTypeName);
Run Code Online (Sandbox Code Playgroud)
问题是第一次运行此代码会导致异常"Sequence contains no matching element".当我再次调用此部分代码时 - 一切正常并且需要加载类型.
谁能解释这种行为?为什么在第一次调用的范围内没有找到需要的汇编/类型?
您面临的问题是由类的GetAssemblies方法的设计引起的AppDomain- 根据文档该方法:
获取已加载到此应用程序域的执行上下文中的程序集。
因此,当您的程序类型第一次未能找到时,应用程序显然尚未加载其程序集。之后 - 当使用包含相关类型的程序集中的某些功能时 - 程序集已加载,并且相同的代码已经可以找到丢失的类型。
请尝试直接加载程序集。而不是使用:
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
Run Code Online (Sandbox Code Playgroud)
您可以使用:
List<Assembly> assemblies = Assembly.GetEntryAssembly().GetReferencedAssemblies().Select(assembly => Assembly.LoadFrom(assembly.Name)).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2599 次 |
| 最近记录: |