让人哭笑不得的“Unable to load one or more of the types in the assembly”问题的解决!

这两天一直在为“Unable to load one or more of the types in the assembly”而头疼,我相信凡是有需要大量使用Reflection来Load Assembly,并动态地调用ass.GetTypes()或ass.GetType(string)或CreateInstance()的朋友可能会和我一样遇到这个恼人的问题。而且这个问题是非常隐蔽的,一般如果GetType或CreateInstance执行时遇到这个问题,而选择出错不提示的话,程序只是简单的返回null。而且,至今未找到任何描述为何会这样原因的文档。

还是来看看出错的典型场景:

Assembly ass = Assembly.LoadFile(assPath);
t = ass.GetType(typeName, false);

就是这么明显的代码,却时常会发生这个“Unable to load one or more of the types in the assembly”错误,明明指定的Type在这个Assembly中,却报错并返回null。而且,有的程序集运行正常,有的则不行,甚至,有的有时正常有时报错,简直是对Bill没话说。

几经周折,发现解决办法:用LoadFrom代替LoadFile:

Assembly ass = Assembly.LoadFrom(assPath);
t = ass.GetType(typeName, false);


的确很简单,简单到我想笑,但是,在网上找了无数圈,无数的朋友却都没尝试这样做而烦恼不已。

比较MSDN中Assembly.LoadFile和Assembly.LoadFrom的描述:

Assembly.LoadFile:
Note: This namespace, class, or member is supported only in version 1.1 of the .NET Framework.

Loads the contents of an assembly file.


Assembly.LoadFrom:
Loads an assembly.

除此之外没有任何不同的说明!

无话说,只能感叹又一次被Bill叔叔耍了~~

<think>我们注意到用户已经意识到错误是将控件名当作bool变量名使用了。这种情况下,我们需要确认用户是否已经正确解决问题,并可能给出一些避免类似错误的建议。 回答应该包括: 1. 对用户自我发现的错误表示理解。 2. 建议如何避免类似错误(比如命名规范、变量声明检查等)。 3. 如果需要,可以给出修改后的代码示例(但用户可能已经解决,所以可以简洁)。 然后,根据问题和回答,提出3-5个相关问题。 注意:必须严格遵守格式要求,末尾输出“§§相关问题§§”以及相关问题。 </think>理解这种情况!将控件名错误用作布尔变量名是常见的开发小失误。不必道歉,这类问题在UI开发中很常见。以下是排查和避免方案: ### 问题根源分析 - **命名冲突**:您可能在代码中定义了名为 `ColorAutoCheckSet` 的 TabPage 控件(比如拖拽到窗体自动生成),后来又试图用它存储布尔值 - **智能提示误导**:VS的智能提示不会区分控件名和变量名,容易误选 --- ### 快速解决方案 #### 1. 重命名控件(推荐) 在设计器中修改控件名: ```csharp // 原错误名称 private System.Windows.Forms.TabPage ColorAutoCheckSet; // 改为带前缀的规范命名 private System.Windows.Forms.TabPage tabColorAutoCheckSet; ``` #### 2. 明确声明新变量 在类中正确定义布尔变量: ```csharp private bool isColorAutoChecked; // 新增布尔变量 // 在复选框事件中赋值 private void checkBox6_CheckedChanged(object sender, EventArgs e) { isColorAutoChecked = checkBox6.Checked; tabColorAutoCheckSet.Enabled = isColorAutoChecked; // 关联控件状态 } ``` --- ### 命名规范建议(防错技巧) | 类型 | 推荐前缀 | 示例 | |------------|----------|---------------------| | 复选框 | chk | `chkColorAuto` | | 选项卡页 | tab | `tabColorSettings` | | 布尔变量 | is/has | `isAutoChecked` | | 配置字段 | cfg | `cfgAutoCheckMode` |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值