• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

System.TypeLoadException

FancyMouse Microsoft SDE  2005-06-15 11:50:31
恐怕这个是老问题了吧:System.TypeLoadException发生在system.windows.forms.dll中,未能从某程序集中加载类型

背景是这样的,vs.net2003,一个solution里面有C#的两个项目,一个class library一个windows application。windows application引用那个class library,全部生成成功,在使用class library的一个class的时候引发错误。
问题是我以前的应用程序也有引用同一个solution的dll的,那时没有出现过错误。为什么这次就有问题了呢?
...全文
857 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Bob 2005-06-16
C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\FUSLOGVW.exe

用这个工具看看日志。
回复
psn 2005-06-16
不好意思,纠正,如果程序找不到指定assembly, module, type或类成员(fields,函数)信息,或者该部分il出错,报TypeLoadException
如果static变量创建实例出错或者没try的static constructor,报TypeInitializationException
另外我查了ECMA BCL,没有找到前者。这个意外可能是微软自定义的,一般而言,更可能出现在Interop中,dll entry point不存在或者COM接口找不到(Tlbimp.exe机制的弱点无法辨别同名层次接口函数。)
楼主确认下意外所在行,我猜测用到了COM,而COM的接口发生了改变或者老COM被卸载了,原先solution中obj目录下做的COM封装并没有更新。BCL的dll不该抛出这个意外。
回复
FancyMouse 2005-06-15
没有,一个也没有。
回复
zhongwanli 2005-06-15
MU JI ,察看错误任务

回复
FancyMouse 2005-06-15
那是不是说,TypeLoadException的发生是与static变量实例的构造出错而导致的?
回复
psn 2005-06-15
你修改了class项目,vs.net没能在winApp中反映最新的变化。可能的原因是vs.net认为class没发生改动,如果是强名,这个问题没有。你clean solution或者删除obj目录下所有文件即可。
TypeLoadException发生在type信息生成时,可能某个static变量实例生成时发生exception。因为type信息和static构造是有独立的系统线程运行的,你的代码是没法捕获exception的。代码中唯一可以逮住这个exception的地点在AppDomain.UnhandledException 事件
回复
FancyMouse 2005-06-15
……

我把代码备份好,然后把原来project包括solution删掉,建立新的,然后再把代码恢复过去,就正常了。这样来说是不是project的设置有问题哈?如果是,又是哪里出问题了呢?
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2005-06-15 11:50
社区公告

让您成为最强悍的C#开发者