gpt4 book ai didi

c# - 在程序集中搜索类型

转载 作者:太空狗 更新时间:2023-10-29 23:09:20 25 4
gpt4 key购买 nike

我有一个问题,代码 Type.GetType(myTypeName) 正在返回 null,因为具有该类型的程序集不是当前正在执行的程序集。

接下来是我找到的针对这个问题的解决方案:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();
Type myType = assemblies.SelectMany(a => a.GetTypes())
.Single(t => t.FullName == myTypeName);

问题是此代码的第一次运行导致异常“序列不包含匹配元素”。当我再次调用这部分代码时 - 一切正常,所需的类型已加载。

谁能解释这种行为?为什么在第一次调用的范围内找不到需要的程序集/类型?

最佳答案

您遇到的问题是由 GetAssemblies 的设计引起的AppDomain 类的方法 - 根据文档此方法:

Gets the assemblies that have been loaded into the execution context of this application domain.

因此,当在您的程序中第一次找不到类型时 - 它的程序集显然还没有被应用程序加载。之后 - 当使用了包含相关类型的程序集的某些功能时 - 程序集已经加载,并且相同的代码已经可以找到丢失的类型。

请尝试直接加载程序集。而不是使用:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();

你可以使用:

List<Assembly> assemblies = Assembly.GetEntryAssembly().GetReferencedAssemblies().Select(assembly => Assembly.LoadFrom(assembly.Name)).ToList();

关于c# - 在程序集中搜索类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com