![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
打开App_Web_skin-navigationmenu.ascx.4f634227.fnkdfznr.0.cs的代码检查了一下,发现有两处地方定义了Profile:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
显然错误就来自Profile的重复定义。
App_Web_skin-navigationmenu.ascx.4f634227.fnkdfznr.0.cs是由ASP.NET 2.0运行时动态编译Web\Themes\default\Skins\Skin-NavigationMenu.ascx生成的文件,所以我们需要进一步查看Skin-NavigationMenu.ascx,原来在Skin-NavigationMenu.ascx中定义了一个id为“Profile”的控件:
![](/Images/OutliningIndicators/None.gif)
于是, 动态编译生产的代码中就有protected global::AspNetForums.Controls.ForumAnchor Profile;的定义。
而ASP.NET 2.0为了支持Profile功能,编译时在产生的代码中也增加了一个System.Web.Profile.DefaultProfile Profile的定义,从而引起了这个问题。
所以,在ASP.NET 2.0的页面或用户控件代码中,不要使用Profile变量名,以免引起命名冲突从而产生运行时错误,在编译时VS 2005也不会给你任何提示。
对于我这里遇到的问题,我采取的处理方法是在Skin-NavigationMenu.ascx中加上CompilationMode="Never"。也就是: <%@ Control Language="C#" CompilationMode="Never"%>,这样就不让ASP.NET 2.0运行时对这个文件进行动态编译,因为Skin-NavigationMenu.ascx中没有代码,也没有code behind文件,不然的话就要对Profile改名,但这会影响其他地方的代码。
我觉得这里也是ASP.NET 2.0的美中不足之处,如果设计时考虑到这一点,起一个不容易重复的名称,当然更好的是在动态编译时自动检测这个命名冲突,并对冲突的命名进行处理,那就锦上添花了。设计之美不仅表现在架构等高层次的地方,更体现于这些细微之处。
在网上搜索这个问题,大多数的回答都是认为是asp.net forum与asp.net 2.0不兼容性,也就认为asp.net forum不能运作在asp.net 2.0上。写到这的时候,我进行了简单的测试,不在.NET 2.0中对Asp.net Forums2.0 RC2进行编译,直接让ASP.NET 1.1版的Asp.net Forums2.0 RC2运行在ASP.NET 2.0上,并解决上面说明的问题,测试的结果是可以正常运行,我只是简单测试:用户登录、发表文章、回复文章。没有进一步测试,不知是否有其他问题。有兴趣的朋友可以进一步测试。