深蓝居

关注MS的VS2008和SQL Server 2008

常用链接

统计

积分与排名

朋友

学习生活

最新评论

如何将asp.net的后台cs代码移动到页面上

在做项目时,我们一般会将aspx文件和其后台cs文件分开,然后将后台的cs文件编译成dll发布到生产环境中。如果我们的项目规定是每周1发布一次,现在发布后第二天客户在其中某个页面发现一个Bug导致业务无法正常处理,这个时候我们的项目正在添加新的功能,编码还没有完成,不可能为了这一个页面而将这没有完成的整个项目重新发布到生产环境中,这个时候怎么办拉?
我们知道aspx运行有两种模式,一种是编译运行,一种是解释运行.编译运行就是我们将后台c#代码编译成Dll,在aspx页面运行时调用这个dll来执行.而解释执行就是像是asp一样将后台代码和页面代码放在同一个aspx页面上,由IIS解释c#代码来运行.于是我们想到的解决办法就是专门针对这个页面把其后台CS代码中的bug修正,测试没有问题了,然后将后台cs文件转移到aspx文件中,让将这个新的aspx文件复制到正式环境中,覆盖原来错误的aspx文件。
将后台的cs代码转移到页面上主要是做如下操作:
1.去掉aspx头Page部分的CodeFile属性,这个属性指示了页面的后台文件的文件名.
2.在Page中添加Inherits属性,这个属性的值是页面后台文件的父类,如果页面的父类是System.Web.UI.Page,那么可以不加这个属性.
3.将后台代码所使用的名字空间添加到aspx的头,使用<%@ Import Namespace="名字空间" %>进行引入.
4.在aspx页面的最下面添加<script runat="server"></script>,然后将后台代码中类里面的所有变量,属性,方法等等都放在script中.
通过以上几步我们就可以将后台cs文件转移到aspx页面上,这样让IIS直接解释aspx文件执行,而不是通过调用发布后的dll执行.
出于平时需要即时修改一个单独页面,所以我写了一个小程序来自动转换后台cs文件到aspx文件中.
比如一个页面:

aspx页面
对应的后台代码是:
后台cs代码
我们将这个页面的后台代码写到页面上的代码就是:
转换后的aspx代码

转换程序下载
【出自博客园深蓝居,转载请注明作者出处】

posted on 2007-07-25 15:25 深蓝 阅读(2504) 评论(30)  编辑 收藏 所属分类: Web开发.Net开发

评论

#1楼  2007-07-25 15:31 三千.℡      

我想你有一些错误的理解:由IIS解释c#代码来运行
  回复  引用  查看    

#2楼  2007-07-25 15:32 三千.℡      

实质还是编译,只是在第一次运行时编译.
  回复  引用  查看    

#3楼  2007-07-25 15:37 鼠标王 [未注册用户]

呵呵,这种方法是错误的。不需要的功能你可以不发布。只要程序能够编译过去就可以。编译不过去的可以排除。   回复  引用    

#4楼 [楼主] 2007-07-25 15:44 深蓝      

我们这儿是一个Web项目,可以实现"不需要的功能可以不发布"吗?怎么做?   回复  引用  查看    

#5楼  2007-07-25 15:49 菠萝密多 [未注册用户]

没听说过软件配置管理吗?   回复  引用    

#6楼  2007-07-25 17:02 xhp5678      

我觉得这是不太可取的方法,软件都是有阶段性版本的,而且是需要严格测试的。
假如真有用户使用过程中出bug,那就恢复到上一个离现在最近的版本。   回复  引用  查看    

#7楼  2007-07-25 17:03 RZ [未注册用户]

难道你们项目不测试就发布么?   回复  引用    

#8楼  2007-07-25 17:52 cnlamar      

谁告诉的把代码放到page里就成解释执行了?   回复  引用  查看    

#9楼  2007-07-25 17:53 cnlamar      

使用ASPNET2.0的完全不预编译发布方式应该可以满足你的需要。   回复  引用  查看    

#10楼  2007-07-25 18:16 金色海洋(jyk)      

不测时就可以发布了呀,而且不管有没有bug 就继续往下走,真的是厉害呀。   回复  引用  查看    

#11楼  2007-07-25 18:21 Journey [未注册用户]

.net是预编译的吧   回复  引用    

#12楼  2007-07-25 19:26 Tam [未注册用户]

有时候使用这种方法也挺方便的,譬如把webservice写到前台页面,js就可以直接执行了   回复  引用    

#13楼  2007-07-25 20:09 zoti      

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.ArgumentOutOfRangeException: StartIndex 不能小于 0。
参数名: startIndex
在 System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
在 System.String.Substring(Int32 startIndex)
在 CodeBehindToCodeOnPage.Form1.btnConvert_Click(Object sender, EventArgs e)
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** 已加载的程序集 **************
mscorlib
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
CodeBehindToCodeOnPage
程序集版本: 1.0.0.0
Win32 版本: 1.0.0.0
基本代码: file:///C:/Documents%20and%20Settings/Zoti/桌面/CodeBehindToCodeOnPage/CodeBehindToCodeOnPage/bin/Debug/CodeBehindToCodeOnPage.exe
----------------------------------------
System.Windows.Forms
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
mscorlib.resources
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.832 (QFE.050727-8300)
基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
System.Windows.Forms.resources
程序集版本: 2.0.0.0
Win32 版本: 2.0.50727.42 (RTM.050727-4200)
基本代码: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_zh-CHS_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** JIT 调试 **************
要启用实时(JIT)调试,
该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
jitDebugging 值。
编译应用程序时还必须启用
调试。

例如:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

启用 JIT 调试后,任何无法处理的异常
都将被发送到在此计算机上注册的 JIT 调试器,
而不是由此对话框处理。


  回复  引用  查看    

#14楼  2007-07-25 20:42 信息谷 [未注册用户]

何苦呢   回复  引用    

#15楼  2007-07-26 00:53 问天      

难道楼主公司没有一个人知道什么是 svn / cvs以及visual soucesafe么?   回复  引用  查看    

#16楼  2007-07-26 08:04 81      

楼主提供的也是一种不错的解决方案,为何这么多人非议呢?你的方法真的比这个方法方便很多吗?你的软件经过测试后就没有错误了吗?   回复  引用  查看    

#17楼  2007-07-26 08:35 铱星      

这应该是源代码管理实现的事情,你可以选择不同的版本来发布   回复  引用  查看    

#18楼  2007-07-26 09:35 阿武      

ASP.NET 2.0 可以直接上传.cs文件上去,编译器会自动重新编译该文件   回复  引用  查看    

#19楼  2007-07-26 09:49 镜涛      

遇到问题应该先解决才是,长此以往会不会导致项目失败阿?毕竟Bug会不断出现的!实在不行就做测试阿!   回复  引用  查看    

#20楼  2007-07-26 10:19 戈多      

寒楼主啊,这样的软件开发真是太BH了   回复  引用  查看    

#21楼 [楼主] 2007-07-26 10:23 深蓝      

谢谢大家的帮助和指点,我们项目使用TFS进行管理,测试人员和开发人员的比例是1:2,也有每个版本的计划性发布.但是正如楼上81所说的"软件经过测试后就没有错误了吗?"我这篇文章是说一种非常紧急情况下的应对方法,是重新编译发布或版本还原所无法解决的.   回复  引用  查看    

#22楼  2007-07-26 10:36 fred [未注册用户]

如果你们勤快,可以这么做,也没错嘛。蛤蛤。
但是增加了工作量,cs代码放置到aspx页面里面需要重新测试。
如果能够把这部分的时间话在程序测试上,我想会更好。
我是一个赖人,不愿意做这种没有意思的重复性劳动。
不过你的职业精神还是让人“佩服”的。   回复  引用    

#23楼  2007-07-26 10:57 妞妞 [未注册用户]

大家没必要这样对楼主,其实这个方法还是可行的   回复  引用    

#24楼  2007-07-26 17:20 color [未注册用户]

我想知道楼主这样有什么意义啊!   回复  引用    

#25楼  2007-07-26 22:09 朱朱饰品 [未注册用户]

原始的方法,将该算是很有创意,有些情况很有点实际应用价值的   回复  引用    

#26楼  2007-07-27 10:11 puma [未注册用户]

你的工具报错了   回复  引用    

#27楼  2007-07-27 14:34 fly2008 [未注册用户]

没有正式发布,可以直接把Cs文件一起放到服务器上用啊,修改起来也方便.   回复  引用    

#28楼  2007-07-30 23:13 calmzeal      

寒,楼上一堆说风凉话的。。

楼主这个办法在某些情况下还是很有用的

写在前台是方便

  回复  引用  查看    

#29楼  2007-07-31 14:14 张廷升 [未注册用户]

很好有许多东西我们明了   回复  引用    

#30楼  2008-05-06 20:46 汉城      

换个角度看看 楼主的问题就是时间问题·!

Bug已经出现了。。 如果时间足够的话 可以去想更多更好的解决方案

问题是 客户不会给你很长的时间 用这个方法一分就能搞定。。。

能解决当时的问题就是好办法   回复  引用  查看