最近要给公司的电子商务网站添加个圈子的功能.网站功能本来就包含有新闻发布,会员管理,商品购物,后台管理等,现在又要再加上圈子的功能,网站项目越来越复杂,每次编译生成的dll超过100k.这样每次修改任何一个功能中的任何一个小问题都要上传整个dll,并导致整个website的首次访问的重新编译.
之前也曾经想过,这些功能根据不同处于项目中的不同文件夹内,比如会员的会在member,后台管理的会在admin文件夹,新闻的会在news文件夹.这样的话如果vs支持按不同文件夹生成不同dll,那我每次修改不同功能的不同文件只要上传对应的dll就可以了,不再需要上传整个website的dll.
不过想法是美好的,事实是残酷的.vs并不支持这样的功能.所以在功能直接交互和文件共享并不多的功能上,我采取了重新建立一个projects的方法,比如把后台管理剥离出来,新建一个admin的website,这个新的projects放在website的根目录下,然后修改文件编译生成dll后的目录为..\bin并且删除项目中的web.config.编译后访问,呵呵,真的可以访问了,并且达到了拆分项目的要求.倒是并不完美,还有手动修改很多设置,并且这2个项目中不能共享相同的master,和usercontrol,甚至是图片,js等,如果直接使用相对路径,那么视图模式下将不能正常显示,如果vs直接提供新建子项目的功能并能解决共享这些文件,该有多好啊.
于是通过Google,找到一篇文章http://blogs.msdn.com/webdevtools/archive/2006/07/01/652986.aspx,Creating sub-projects in IIS with Web Application Projects,不幸的是文中提到的“Web Application Projects” add-in,我Download了,but can''t install!
虽然这样的应用程序我们无法制作,但是我们可以按照他的思路自己修改配置啊.
发现他的方法,跟一开始我的做法是很类似的,不过他可以共享master和user control,为什么我的不能呢?
仔细翻看了一下,发现原来他在子项目中创建了虚拟目录比如 http://localhost/group,所以之前使用~/Group.Master,只能访问本项目中的master,而现在则可以访问根目录中的master了,试试usercontrol,也可以了,呵呵,原理奥妙都在这个虚拟目录中呀.
不过最后,还是觉得这样的方式不是很舒服,不知道大家有没什么好的办法,我在这里抛下砖.
评论:
2008-06-25 12:02 skyweo
我是直接分成N个子网站,分别用子域名,这样就互不干扰了,不过需要实现会话共享
2008-06-25 13:01 金色海洋(jyk)
可以分成多个项目,比如后台管理一个项目,
前台页面一个项目,如果网站比较大的话,也可以分成多个项目。
公用的地方可以做一个单独的项目,然后编译成dll文件,在其他的项目里引用。
上传,建立一个站点,把多个项目的 dll都上传到 网站的 bin目录下面,其他的 .aspx 文件也都传到同一个网站里面(当然要按照文件夹的结构上传),这样就可以一起访问了。
master的还没有用过,不知道要怎么共享。
2008-06-25 14:02 沙加
可以把比如admin 的后台类单独放一个工程里面~~不过缺点就是需要在后台代码里面手动申请页面上的控件,好象也没有太大的关系吧~~
2008-06-25 14:06 waitu
1 有这种拆分需求的项目,还是不要使用master之类的控件了。。
2 可以为子项目建立单独的解决方案。各个子解决方案的配置文件都必须一样。配置的时候在合并到一起。
3 公用方法建立当度的项目,所有的子解决方案都可以调用。
这样的网站结构:
/
--bin
--/blog/
--/bbs/
--//
--config.xml