您的位置:首页 > 运维架构 > 网站架构

VS2005网站发布不便问题讨论

2007-06-22 17:17 441 查看
一、问题引入
在VS2005网站开发过程中,网站发布问题一直是个问题.VS2005创建的网站有几个默认的目录:App_Code,App_Data,App_Themes........
如果是但cs/vb文件,比如UploadFile.cs类UploadFile,这个类文件没有可视的aspx文件,那么这个文件就必须放到App_Code目录下,否则在VS2005网站中,该类是不可访问的.那么放就放进去吧,但是编译的时候(我的VS2005是Team版的,生成没有反应,感觉象是检查了一遍代码,只能使用发布网站来预编译.不知道其他版本怎么样.)问题来了.选择发布网站后,它会让你选择以什么方式发布,一般选默认就可以了.那样生成的dll数量还少点.发布后,在bin目录一般会有App_Code.compiled,App_Code.dll,App_Web_(随机字符).dll,引用的dll等文件.问题就出在这了,如果要做个免虚拟的程序,岂不是可能bin目录会需要放两个App_Code.dll?会不起冲突么?还有,如果程序更改一次需要重新发布,那就完了.看看VS2005干的好事吧.inherits="MyCodeGif, App_Web_vf3ukhnv"本来好好的,一个MyCodeGif.aspx文件,一个MyCodeGif.aspx.cs文件,现在MyCodeGif.aspx文件继承自MyCodeGif, App_Web_vf3ukhnv,可以看出MyCodeGif是MyCodeGif.aspx.cs定义的类,App_Web_vf3ukhnv是bin文件夹中的一个dll文件名.你再尝试发布一次的话,更头疼的问题来了,怎么MyCodeGif.aspx页面又继承自MyCodeGif, App_Web_qwdwqd了?编译后的程序集名字都不一样了!

二、ASP.Net中页面与类的关系
ASP.Net 中,页面是可以继承自类的,可以多重继承。比如
MyCodeGif.aspx页面文件


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="MyCodeGif" %>
MyCodeGif.aspx.cs中是这样的


using System;


using System.Data;


using System.Configuration;


using System.Collections;


using System.Web;


using System.Web.Security;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.UI.WebControls.WebParts;


using System.Web.UI.HtmlControls;


using FreeCodeNum;




public partial class MyCodeGif : System.Web.UI.Page






{


protected void Page_Load(object sender, EventArgs e)






{
//.....逻辑


}


}



可见MyCodeGif.aspx页面继承自类MyCodeGif

也可以这样继承
MyCodeGif.aspx页面文件


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="MyCodeGif" %>

MyCodeGif.aspx.cs中是这样的


using System;


using System.Data;


using System.Configuration;


using System.Collections;


using System.Web;


using System.Web.Security;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.UI.WebControls.WebParts;


using System.Web.UI.HtmlControls;


using FreeCodeNum;




public partial class MyCodeGif : PageBase






{


protected void Page_Load(object sender, EventArgs e)






{
//.....逻辑


}


}



PageBase.cs这样


using System;


using System.Web;


using System.Collections;






/**//// <summary>


/// PageBase 的摘要说明


/// </summary>


public class PageBase : System.Web.UI.Page






{


public PageBase()






{


}


}



如过象我MyCodeGif.aspx页面文件,我甚至可以


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="PageBase" %>
也就是页面直接继承自PageBase类。

结论:ASP.Net的页面可以继承自
从 [继承自System.Web.UI.Page类的父类 ] 扩展的子类

三、解决方案
在VS2005中也是可以自定义程序集名称的——那就是在创建项目的时候,而不是网站的时候。也就是说可以在你创建的网站已经写好了,你可以重新创建个项目,然后把网站的代码拿来重新编译。便宜完后可能需要更改aspx文件的继承,可能也不必更改,看你怎么便宜了,因为aspx文件的继承只和类名(有命名空间时,也要指定命名空间)有关。MyCodeGif.aspx页面文件完全可以改成


<%@ Page Language="C#" AutoEventWireup="true" Inherits="PageBase" %>

把里面的CodeFile="MyCodeGif.aspx.cs"去掉。

这样就能模仿VS2003的方式发布网站了。过程可能复杂点,但是对于后期维护我感觉还是挺有用的,毕竟习惯了VS2003.而且可以和2003一样做免虚拟的程序了。

全文完。希望能对大家有用。
作者:谢平,夕阳轨迹 2006-5-27

posted on 2006-05-27 12:35 BirdsHover 阅读(5054) 评论(14) 编辑 收藏 引用 网摘 所属分类: ASP.Net2.0



//Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);
//]]>

评论

VS2005随机生成名字 这个功能真的不是一般的滥

楼主的作法没问题,不过 后期维护也很麻烦. 实际上是使用了继承 而不是 后台代码这种结构. 造成页面元素和后台代码分离. 在MS出解决方案之前, 只能用运行时编译那种方式发布,即发布时 同时发布跟随 ASPX文件原码.

另外, APP_CODE目录 没必要用, 把这个目录的代码拿到一个单独的类裤中,生成一个DLL , OF COURCE, 是固下名字的. 在Web site 中引用一下.

回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-06-06 11:21 魔法师

我倒。我就在找。怎么没有DLL文件。以为VS.NET2005不要DLL了吗
原本是要在发布的时候才出现。
不过看了楼主的介绍还是有点云里雾里的。感觉自己要学的东西好多。 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-06-09 18:48 一滴水

@谢平
这样使用 partial 把像Button这样的是在也面上声明的,后面类就直接使用前台aspx的页面,在使用类库形式编译的,这样就会造成cs页面就没有造成编译通同过,不知道楼上怎么解决的? 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-06-20 23:00 @VS

VS2005滥透了. 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-06-20 23:05 @VS

VS2005滥透了,维护网站除了重新生成新的DLL文件外(原来旧的DLL文件并没有被覆盖),还得在几十个文件夹里面一个个地将aspx文件覆盖掉. 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-06-24 15:37 北极熊,我来了!

用了这样的方式之后,好象对于botton就没用了,程序会出现错误,不知道是什么原因? 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-06-28 17:55 谢平

@北极熊,我来了!
@一滴水

ASPX文件源代码的发布确实存在很大问题,可以考虑不使用继承,而直接引用
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

里的 CodeFile="Default.aspx.cs" Inherits="_Default" 直接去掉,绑定部分代码直接在页面给出。对于逻辑层的东西,可以引入DLL的命名空间解决。

我暂时只想到这个解决办法。

我的这篇文章主要是解决App_Code目录生成固定程序集名称的问题。解决免虚拟的问题 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-06-28 23:04 阿不

我想不是Vs 2005滥吧?应该是我们还没有适应这种模式的开发而已,Microsoft推出这种模式可以说是一种尝试,但是到目前为止,我认为这种模式并不能让大多数人接受,(至少是国内)。所以在Vs 2005推出不久就又推出Web Application Project模式,类似于Vs2003的项目文件管理整个项目的方式。不过我还是觉得它与VS2003有很大的差别,至少融合Web site的一些优点,(比如不需要与IIS的映射等)。目前基本就用它了。

回到本文的主题,关于Web Site的部署问题,不知道大家有没有发现,在项目工程点右键可以看到一个菜单"Publish Web Site",可以用它来发布站点,其中有一些选项可能是你需要的,比较强名称,将所以的页面代码编译成一个Assembly等等。
先到这,欢迎交流。 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-07-10 12:49 microsystem

有没有方法直接把web site 转换成 web app ,
web site 一个页面只有两个文件,web app 就有三个了!

强名称是不是就可以将所以的页面代码编译成一个Assembly??

还有一个问题就是:

用 web app 中 vb 默认系统生成的vb 文件类名,和 C# 生成的不一样
C# 会根据目录结构定义命名空间, VB 没有!

C# onclick 等事件是在aspx页面上定义 ,不能像VB 一样在VB 文件定义!

对于以上两个问题 ,还有解决方法?
回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-07-12 13:07 谢平

@microsystem
web site有些部分是不能转成web app的,只能部分转

编译成一个DLL通过WebDeployment工具也能做到

命名空间可以自己加

C# onclick 等事件是在aspx页面上定义,也可以和1.1一样自己添加类似下面
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
这种 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-09-07 10:38 hihi

vs2005自带的发布功能不是挺好? 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-09-08 08:57 谢平

@hihi
vs2005带了两种发布功能,这里讨论的是编译的方式运行,当然,源码方式运行不存在这问题。 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-09-15 03:54 路过

WebDeployment用这个插件吧。或者使用英文版本的可以下载另一个插件。象vs2003建立web app 而不是 web site.中文版本好象现在不支持 回复 更多评论

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-12-14 22:58 Jason Cui

楼主的发布方式似乎有问题,反正我用Pro版没有遇到过问题,编译网站就是把所有代码编译一遍,可以用来检查错误,发布网站就是生成一个干净的目录,编译出所有的dll文件。dll的名字并不重要,这个并不是你应该关心的。在源aspx文件中已经指明了它的后台代码文件,这里并不是使用继承实现的,而是用partial类,所以生成的dll文件叫什么都无所谓,只要被加载,它里面的类名就可以被找到。

# re: 巧用VS2005解决VS2005网站发布不便问题 2006-05-27 19:45 lonfone
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: