.NET 4.0下ASP.NET WebForms路由报错:System.Web中不存在Routing命名空间
我之前在.NET 4.0的WebForms项目里也碰到过一模一样的问题,折腾了好一会儿才解决,给你整理几个排查步骤,应该能帮到你:
确认程序集引用与web.config配置
虽然你说已经添加了System.Web.Routing引用,但还是得仔细核对:- 右键项目 → 「添加引用」→ 切换到「.NET」标签,找到
System.Web.Routing(版本必须是4.0.0.0),确保它处于勾选状态。 - 打开项目根目录的
web.config,检查<compilation>节点下的<assemblies>集合,是否包含这一行配置:
如果没有,手动添加进去——有时候添加引用后IDE不会自动写入这行配置。<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
- 右键项目 → 「添加引用」→ 切换到「.NET」标签,找到
验证Global.asax的代码写法
先暂时跳过<%@ Import Namespace="System.Web.Routing" %>,直接在路由注册代码里使用完整命名空间,测试是否能编译:void Application_Start(object sender, EventArgs e) { // 用完整命名空间调用路由API System.Web.Routing.RouteTable.Routes.MapPageRoute( "SampleRoute", "products/{category}", "~/Products.aspx" ); }如果这样能正常编译,说明是Import语句的问题,可能是Global.asax的声明有冲突;如果还是报错,那问题大概率出在程序集或项目框架配置上。
检查项目的目标框架版本
右键项目 → 「属性」→ 「应用程序」标签,确认「目标框架」是完整的.NET Framework 4,而不是.NET Framework 4 Client Profile——这个精简版会砍掉一些非客户端组件,包括路由相关的部分。如果是Client Profile,切换到完整的.NET 4即可。清理编译缓存并重建项目
有时候IDE的编译缓存会导致莫名其妙的引用问题,试试这几步:- 右键项目 → 「清理」
- 删除项目目录下的
bin和obj文件夹 - 关闭Visual Studio,重新打开项目后右键选择「重新生成」
确认Visual Studio版本兼容性
.NET Framework 4.0是随Visual Studio 2010发布的,如果你用的是VS2008及更早版本,IDE根本无法正确识别.NET 4.0的新程序集,必须升级到VS2010或更高版本才能正常开发。
如果以上步骤都试过还是不行,建议新建一个干净的.NET 4.0 WebForms项目,添加路由代码测试是否能正常运行——如果新项目没问题,那说明原项目的配置文件或项目结构可能已经损坏,需要逐步迁移配置和代码到新项目中。
内容的提问来源于stack exchange,提问作者user2645738

