今天在改进几个 Web Part 时,发现一个问题,Debug 用了近4个小时,最终解决却仅需几分钟,关键就是先运行 iisreset !
改进项目是一个页面上有多个 Web Part,且Web Part 间需传递参数,目前使用的是一个 Interface 来实现传递,会编译为 dll 放在 GAC 中使用。今天的改进就是因这个 Interface ,在其中新增加了一个 Property (XYZ), 结果在其后的测试中,总是提示出错: "invalidate get_XYZ()",但实际上不可能有此function,为此问题,不停的测试和 Debug 。在Debug 时发现此 Interface 实现后的值好像在 Watch 窗中显示的值出现位置的错乱,且有错误提示。就这样在不停的试来试去中,竟花了近4个小时。
最终下终时间已过了近一个钟了,仍未能解决此问题。在出办公室透气时,突然想到应试着重启电脑或重启IIS,结果,一切OK。
原因分析: 应是相关dll 虽已注册至 GAC 中,但在IIS 运行时,并不会变为新注册在GAC中的dll ,但也不是不变,仅部分,这应是IIS 的一个问题,故导至新加的 Property 或 Method 均不能使用。直至你重启 IIS 。
所以记住:如有在GAC 中注册的dll ,请注册后重启 IIS 再来调用和使用它,否则你会很麻烦。