具体情景描述如下:
http://blog.csdn.net/cuipengfei1/archive/2009/02/18/3905368.aspx
即使在TheForm中用try -catch来把访问dll的代码包含起来,还是会发生截图中报错的结果。这是为什么呢?
http://blog.csdn.net/cuipengfei1/archive/2009/02/18/3905368.aspx
即使在TheForm中用try -catch来把访问dll的代码包含起来,还是会发生截图中报错的结果。这是为什么呢?
解决方案 »
- C/S结构之间是怎么传输数据的?
- FTP文件同步,FileSystemWatcher的使用
- 高分求教!C# 如何实现excel 导入到SQL或dataGridView
- B/S中从数据库中读取IMAGE类型并已返回byte数组 如何显示在指定控件上?
- 实际开发当中遇到的父子关系问题,高手指点。!
- C#中如何把字符串转换成十六进制的数字?例:"af"->0xaf
- 求一段自动生成数据库的代码!!
- C# 向 Access 插入一条白吃记录的白痴问题
- c#视频远程传送如何实现?
- 创建和访问xml web services的问题,在线等待。 难道真没人知道吗?我太失望了!
- 如何用JS提取Word中的图片
- c#动态生成一个数组
因为MSIL不兼容而造成的异常不可以用try catch来捕捉?
那...why?
MissingFieldException 类通常,如果代码试图访问不存在的类成员,会生成编译错误。MissingFieldException 则设计来处理这样一种情况:试图动态访问程序集中已重命名或已删除的字段,而该程序集并不是按其强名称来引用的。当相关程序集中的代码试图访问已经修改的程序集中已不存在的字段时,就会引发 MissingFieldException。其中有个示例此示例演示在您尝试使用反射来调用不存在的方法和访问不存在的字段时所发生的情况。应用程序通过捕捉 MissingMethodException、MissingFieldException 和 MissingMemberException 来恢复。确实,用反射来调用不存在的方法和访问不存在的字段时会引发并可以捕获该异常。但我们偷偷地改变 dll 时就无法捕获该异常了。
MSDN 另外有个解释:http://msdn.microsoft.com/zh-cn/library/ze74ahef.aspxVisual Studio 调试器
关于异常的疑难解答:System.MissingFieldException如果类库中的某个字段已被移除或重命名,请重新编译引用该库的所有程序集。
然后,偷偷地改变 dll 时,因为不需要动态地在运行时生成该字段的引用,就无法捕获该异常了。如果是通过反射在运行时访问该字段,而发现字段不存在,就可以捕获该异常。不知是不是这样的。
我说的静态是相对于反射而言的,反射是动态地访问。比如象这样:
button1.Text = DH.Data;直接访问 DH.Data 就属于静态地使用该字段。如果是通过反射来访问 DH.Data ,而不是在代码中直接写 DH.Data ,就是动态地访问。
而JIT的翻译单位是方法,在翻译完一个方法后,才会运行到这个方法。
所以,在这个方法第一次被调用的时候,JIT试图翻译这个方法,抛出了这个错误,而try-catch有在这个方法内,一个没有翻译成native code的方法内的所有代码自然不会运行,即,此时根本还没运行到try的范围内,自然不能捕捉的异常。
TheDLL.DataHolder DH = new TheDLL.DataHolder();
改了dll.程序域的session会丢失.
会不会是同样的道理?.net会和内存中的dll对比.不同要重新加载.再运行.而你还没加载新的。可能根本捕捉不到吧.猜猜.
既然button1_Click无法被翻译成native code,那么谁去调用DataHolder的构造函数哪?