本地IIS网站运行时出现Handles子句WithEvents变量定义错误求助
我之前开发ASP.NET Web应用时也碰到过几乎一模一样的问题——重建项目完全没问题,但一点运行就弹出Handles clause requires a WithEvents variable defined in the containing type or one of its base types错误,折腾了好几个小时才搞定,给你分享几个靠谱的排查方向:
确认后台代码的
WithEvents声明
虽然重建没报错,但IDE运行时可能没正确关联页面控件和后台变量。你要确保aspx页面里的每个触发事件的控件,在对应的aspx.vb文件里都用WithEvents声明了,比如:Protected WithEvents btnSave As System.Web.UI.WebControls.Button同时要保证aspx里的控件
ID和后台变量名完全一致,比如<asp:Button ID="btnSave" runat="server" Text="保存" />,大小写也要对应哦。清理IDE和项目缓存
Visual Studio的缓存有时候会抽风,导致控件和后台代码的关联失效。按这个步骤来清缓存:- 完全关闭Visual Studio
- 找到解决方案根目录,删除隐藏的
.vs文件夹(要先显示系统隐藏文件) - 删除项目下的
bin和obj文件夹 - 重新打开解决方案,先重新生成整个解决方案,再点击运行试试
检查IIS应用程序池配置
因为你是通过本地IIS运行的,要确保应用程序池的配置和项目匹配:- 应用程序池的.NET Framework版本要和项目的目标框架一致(比如项目用4.7.2,池也要选v4.0)
- 确认应用程序池的身份有足够权限访问你的项目文件,避免加载时出现权限问题导致控件识别失败
验证页面的CodeBehind关联
打开报错页面的aspx文件顶部,检查Page指令里的CodeBehind(Web应用程序项目)或CodeFile(网站项目)属性,确保路径指向正确的aspx.vb文件,比如:<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="UserInfo.aspx.vb" Inherits="MyWebApp.UserInfo" %>如果路径写错或者文件名不一致,也会导致运行时找不到对应的变量声明。
检查Visual Studio运行配置
点击运行按钮前,确认下拉框里选中的是你当前的Web项目(不是解决方案或者其他类库项目),可以试试切换到Debug模式再运行,有时候Release模式的编译优化可能会引发这类奇怪的识别问题。
内容的提问来源于stack exchange,提问作者Jacob

