在ASP.NET开发中,经常需要将Web应用组织成层次化结构,以便于管理和维护。本文将介绍如何实现这一目标,并在Visual Studio.NET (VS.NET) 2003中进行操作。请注意,虽然本文介绍的方法尚未在实际的软件项目中使用,但作者即将开始使用,并期待读者的反馈和建议。
首先,需要创建Web项目的层次结构,并在构建阶段将所有程序集复制到根目录的bin文件夹中。以下是创建项目结构的步骤:
接下来,在VS.NET中创建项目:
默认情况下,Web项目会创建FrontPage访问权限。需要将其转换为使用文件共享,以便轻松使用版本控制系统(VSS)集成。转换后,只需使用"Add Project to Source Control"功能即可。
在C#项目中,可以使用后构建事件。虽然VS.NET IDE不允许为Web应用程序指定后构建脚本,但可以在.csproj文件中设置。以下是如何操作的步骤:
PostBuildEvent = 'move "$(TargetDir)$(TargetFileName)" C:\Projects\RootWeb\bin\'
注意,如果TargetDir包含空格,复制命令将会失败。为了解决这个问题,可以将路径用双引号括起来,并将.csproj文件中的属性分隔符从双引号改为单引号。
在子项目中,需要删除global.asax*和web.config文件,并从.csproj文件中删除相关条目。
如果想改变DefaultHTMLPageLayout为flow以提高HTML兼容性,可以在IDE中进行设置。对于自动创建的WebForm1.aspx,可以删除MS_POSITIONING="GridLayout"字符串,或者在IDE中进行修改。
在RootWeb的WebForm1.aspx中写入一些有用的内容(例如:"Hello World from the Root web")。同样,在RootWeb\Sub1的WebForm1.aspx中也写入一些有用的内容(例如:"Hello World from the sub web 1")。
现在,可以构建解决方案并在http://localhost/RootWeb/webform1.aspx和http://localhost/RootWeb/SubWeb1/webform1.aspx进行测试。如果在根Web上创建了一个ascx文件,可以通过拖放的方式在任何子Web中使用它。此外,所有子Web文件夹中的Web应用程序上下文都是相同的。
虽然按照上述步骤操作可能会有些繁琐,但可以定义一个新的企业模板来简化这个过程。在MSDN上有一个教程介绍了如何定义新的模板。如果目标目录能够自动参数化到根目录路径,那就更好了。
namespace RootWeb.SubWeb1