zoukankan      html  css  js  c++  java
  • ASP.NET 2.0中小心Profile命名冲突

         昨天打算将博客园论坛程序迁移到ASP.NET 2.0,博客园论坛用的是宝玉汉化的Asp.net Forums2.0 RC2,参考 Upgrading VS 2003 Web Projects to be VS 2005 Web Application Projects 将项目从VS 2003迁移到VS 2005中并成功编译。可是在运行时,却出现编译错误,详细错误信息如下:
        
    Compilation Error 
    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

    Compiler Error Message: CS0102: The type 'ASP.themes_default_skins_skin_navigationmenu_ascx' already contains a definition for 'Profile'

    Source Error: 

    Line 207:        }
    Line 208:        
    Line 209:        protected System.Web.Profile.DefaultProfile Profile {
    Line 210:            get {
    Line 211:                return ((System.Web.Profile.DefaultProfile)(this.Context.Profile)); 

    Source File: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\forums\9ef6037b\2a750bf2\App_Web_skin-navigationmenu.ascx.4f634227.fnkdfznr.0.cs    Line: 209

         打开App_Web_skin-navigationmenu.ascx.4f634227.fnkdfznr.0.cs的代码检查了一下,发现有两处地方定义了Profile:
        
    protected global::AspNetForums.Controls.ForumAnchor Profile;

    protected System.Web.Profile.DefaultProfile Profile {
                
    get {
                    
    return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
                }

            }


         显然错误就来自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”的控件:
        
    <forums:ForumAnchor class="menuLink" runat="server" Visible="false" id="Profile" AnchorType="MenuEditProfile" />

         于是, 动态编译生产的代码中就有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上,并解决上面说明的问题,测试的结果是可以正常运行,我只是简单测试:用户登录、发表文章、回复文章。没有进一步测试,不知是否有其他问题。有兴趣的朋友可以进一步测试。
  • 相关阅读:
    【PHP&&MySQL详解】
    【PHP对XML文件的操作技术【完整版】】
    【PHP XML与dtd概述【完整版】】
    【PHP的异常处理【完整】】
    【PHP用户的错误日志】
    【PHP自定义显示系统级别的致命错误和用户级别的错误】
    【PHP数组的使用】
    【PHP构造方法和析构方法的使用】
    【php全局变量和静态变量、静态方法的使用方法】
    【mysql启动Innodb的方法】
  • 原文地址:https://www.cnblogs.com/dudu/p/341225.html
Copyright © 2011-2022 走看看