You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core使用System.Reflection.Emit创建动态类型加载失败怎么办

问题原因

你代码的问题是缺失了动态类型构建的最终提交步骤。使用TypeBuilder配置完类型的继承关系、构造函数等所有规则后,必须显式调用CreateType()方法,才能将完整的类型定义写入动态程序集。如果没有调用该方法,程序集中只会存在未完成的类型占位符,调用GetTypes()加载类型时就会抛出你遇到的加载失败异常。

修复方案

只需要取消你代码中注释的那行CreateType()调用即可,完整的动态类型构建代码如下:

// 定义动态类型
var typeName = "Child";
var typeBuilder = moduleBuilder.DefineType(
  typeName,
  TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit | TypeAttributes.AutoLayout,
  typeof(Base));
typeBuilder.DefineDefaultConstructor(MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName);
// 新增/取消注释下面这行,完成类型创建
typeBuilder.CreateType();

调用CreateType()后,你配置的Child类型会被编译为合法的运行时类型写入动态程序集,此时再调用typeBuilder.Assembly.GetTypes()就能正常获取到该类型,不会再抛出异常。


内容的提问来源于stack exchange,提问作者lonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:39:02