在今天我主要要介绍的有如下知识点:
Visual Studio 2005网站开发环境
任务管理器
配置外部工具
代码段管理器
发布网站
之所以要单独用一篇文章来介绍Visual Studio 2005这个集成开发环境,是因为在做企业培训的时候,发现很多程序员仅仅用了一些基本功能,这个好像也符合软件界一个“20%和80%法则”,就是80%的用户只用到了软件的20%的功能。确实有时候利用基本功能就足以进行开发了,但是有些功能能够方便我们的开发,有些能提高我们的开发速度,所以我觉得这些计较值得跟大家交流一下。
Visual Studio 2005网站开发环境
以上就是Visual Studio 2005的界面,大家再熟悉不过了。和做WinFrom项目有些不同,在Visual Studio 2005里面创建项目有很多选择。
在Visual Studio 2005可以创建的四种网站类型,分别是本地HTTP、文件系统、远程HTTP和FTP。
首先从Visual Studio 2005菜单上依次选择“文件”-“新建”-“网站”,如下图:
然后选择“网站”,出现如下界面:
点击“浏览”,出现如下界面:
下面分别说明这几种网站的特点:
文件系统网站:文件系统网站可能是用得比较多的网站类型,可以指定网站文件的存放位置,便于几种管理。创建文件系统类型网站时开发者机器上不需要安装IIS,可以用ASP.NET Development Server来进行测试。不过ASP.NET Development Server上的网站或者虚拟目录不能在其它机器上访问,它运行的时候随机选择一个大于1024的端口作为Wen服务器端口(因为1024以下的端口已经被指定了用途,比如21作为ftp监听端口,80作为HTTP监听端口)。文件系统网站只适合开发阶段,在部署的时候服务器上还是需要安装IIS的。
本地HTTP网站:本地HTTP网站就是利用IIS作为Web容器运行。每次创建一个Web网站时都会在IIS默认网站主目录下创建一个虚拟目录,IIS默认网站的物理路径是[系统分区]: /Inetpub/wwwroot。
注意按照本地HTTP网站方式创建的网站的物理路径会在系统分区下,这和用Visual Studio 2002及Visual Studio 2003创建的Web项目一样,因此使用Visual Studio 2005打开早期版本的项目时需要将该项目设置为IIS下的虚拟目录。
远程HTTP网站:远程HTTP网站是将Web项目创建在同一局域网内的其它主机的IIS主目录下,远程主机必须要安装IIS和Microsoft FrontPage 2002扩展。
FTP网站:FTP网站是在远程服务器上创建网站,利用FTP对文件进行管理。
在实际开发中使用最多的是文件系统网站和本地HTTP网站,因为便于团队之间利用源代码管理工具(如VSS和SVN)进行协同开发。
需要注意的是使用文件系统网站不能使用基于HTTP的身份验证、应用程序池和ISAPI筛选器等功能。
在实际开发中习惯建立一个解决方案,然后将解决方案文件及类库项目和Web网站项目放在一个文件夹下,这样便于管理和维护。下面我演示一下创建一个带解决方案的Web项目的创建过程:
首先选择“文件”-“新建”-“项目”,这时会弹出一个对话框,如下图:
在对话框中选择“解决方案”,如下图:
在位置中我们通过“浏览”功能定位到“D:/VS2005”,在解决方案中我们填写了“SolutionDemo”这个名字,Visual Studio 2005会在“D:/VS2005”目录下创建一个“SolutionDemo”的文件夹,该文件夹下还有一个“SolutionDemo.sln”的解决方案文件。
然后在Visual Studio 2005窗口的右侧“解决方案资源管理器”中选中当前解决方案,点击鼠标右键,在弹出的窗口中选择“添加”-“新建网站”,如下图:
这时会弹出一个窗口,如下图:
在弹出的窗口中需要几项信息:
(1)选择创建网站的模板,网站模板可能会根据开发者机器上的插件数量有关系。一般我们使用默认配置,也就是“ASP.NET网站”。
(2)设置网站位置。网站位置会根据选择的网站类型不同而不同。在这里使用文件系统网站,然后点击“浏览”,出现如下界面:
定位到“D:/VS2005/SolutionDemo”,然后确定,并在位置一栏中输入Web网站的名称,如“Web”,并且注意将语言选定为“Visual C#”,如下图:
点击“确定”,网站就建立完成了。下图就是我们创建完成后的样子。
在图中我们看到创建一个Web网站成功之后,系统会创建一个默认页面和默认文件夹。一般网站还有一些其它Visual Studio 2005内置的文件夹,不过需要我们手动添加,要添加这些手动文件夹的方式如下图:
我们一般会用到“Bin”、“App_Code”及“App_Data”文件夹,不过“App_Data”文件夹默认已经创建了,我们仅需要手动添加“Bin”、“App_Code”这两个文件夹就行了。之所以说它们内置文件夹,是因为这几个文件夹有着不同的作用,运行的时候IIS和Visual Studio 2005内置ASP.NET Development Server都会有特殊的保护(在开发的时候,可以看见这些文件夹与我们通过普通方式添加的文件夹图标不同)。下面对这几个文件夹的作用做一下简单介绍:
Bin:用于存放我们网站开发用到的第三方dll类库文件(因为运行asp.net网站的IIS服务器所在主机上肯定会安装.net Framework,所以不需要在bin目录下放微软的.net运行环境需要的dll文件)。
App_Code:用于存放中间代码文件,这些中间代码文件一般就是单独.cs文件,它本身就是一个类。当我们向Web项目中增加类的时候,系统就会提示我们是否保存到App_Code文件夹下面,如下图:
App_Data:这个文件夹用于存放数据库文件,比如用Access作为数据库的时候,.mdb文件就可以放到这个文件夹下。
对于上面的文件夹,是不能从浏览器里直接访问里,里面的文件也是无法通过浏览器下载的。
通过上面的步骤建立的网站,解决方案和网站资源集中存放在D:/VS2005/SolutionDemo文件夹下,便于我们发布和管理,经过上面的步骤建立的网站的文件结构如下:
这样将来移动这个项目时直接移动SolutionDemo这个文件夹就可以保持整个网站的所有文件结构。
任务管理器
任务管理器是一个很有用的功能。假如我们开发的项目很大,在项目中有些代码没有完成,为了单元测试我们可能会使用一些代码来欺骗编译器以达到测试项目中的其它功能模块的作用,在测试完之后应该即使完成这些代码,为了将来能顺利找到这些代码块,我们可以做一下标记,便于将来查找。甚至我们在构建网站框架的时候可以做一些备注。
下面的代码就是一个例子:
- using System;
- using System.Data;
- /// <summary>
- /// MyClass是一个演示类,演示如何添加任务
- /// 作者:周金桥
- /// 时间:2008-09-19
- /// 首发地址:http://blog.csdn.net/zhoufoxcn
- /// </summary>
- public class MyClass
- {
- public MyClass()
- {
- //
- // TODO: 在此处添加构造函数逻辑
- //
- }
- public bool Insert()
- {
- //TODO:这里的代码需要完善
- return false;
- }
- public bool Delete()
- {
- //TODO:这里的代码需要完善
- return false;
- }
- }
using System; using System.Data; /// <summary> /// MyClass是一个演示类,演示如何添加任务 /// 作者:周金桥 /// 时间:2008-09-19 /// 首发地址:http://blog.csdn.net/zhoufoxcn /// </summary> public class MyClass { public MyClass() { // // TODO: 在此处添加构造函数逻辑 // } public bool Insert() { //TODO:这里的代码需要完善 return false; } public bool Delete() { //TODO:这里的代码需要完善 return false; } }
要想看到这些信息,我们可以通过如下步骤:“视图”-“任务列表”,就会在Visual Studio 2005的下方看到这些信息,如下图:
在“任务列表”中可以看到所有的任务,以及所在的代码文件名和在该文件中的行数,双击就可以快速打开该文件进行编辑,非常方便。
配置外部工具
对于开发中我们可能会经常用到一些外部工具,比如ILDASM和ILASM等,我们可以配置成Visual Studio 2005的一个菜单项,需要的时候点击一下就可以打开,而不必每次都费时费力找到该文件所在的位置再双击打开。配置过程如下:
从工具栏上找到“工具”-“配置”,如下图:
会弹出一个新窗口,如下:
点击“命令”行后后面的按钮选择文件路径,如下图:
在“命令”里选择文件的路径,这里我选择了ildasm.exe文件(它位于[系统分区]: /Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin目录下)。甚至我们还可以设置文件执行时的参数,上图就是我设置的ILDASM的相关参数信息。配置好以后就可以每次从工具栏上的“工具”菜单中选择运行了,非常方便。
代码段管理器
所谓代码段,就是一些格式比较固定代码,除了某些细节上个差别之外,大部分格式都是一样的。比如要为类定义一个属性,一般要定义一个私有变量,然后在添加get或者set方法或者二者同时具备。在我们的工作工免不了经常要做这些枯燥的工作,不过在Visual Studio 2005中微软为我们提供了一种便捷操作,以减少这种枯燥的工作带来的乏味。
比如我们想给增加一个属性,我们敲入pr的时候,会出现下图所示的智能提示:
在“prop”上敲击回车,然后键入tab键,会看到下面的情况:
假如我们想定义个string类型的属性,将蓝底白字部分的“int”改为“string”,就会看到如下效果:
(缺图)
然后再将私有变量“myVar”改成我们期望的名字,如“userName”,当移开光标时我们会发现属性中的“myVar”也会随之变成“userName”,最后将“MyProperty”改成“UserName”,这样就完成了一个属性的定义了,如下图:
(缺图)
在Visual Studio 2005已经预定义好很多代码段了,如读写属性prop、只读属性propg、try{}catch{}代码段try、try{}finally{}代码段tryf、for循环代码段for和foreach代码段forr等。
如果我们觉得预定义的代码段不能满足我们的要求时,我们可以自定义代码段,经过设置之后可以像预定义的代码段一样使用。要自定义代码段,可以如下操作:
打开[系统分区]: /Program Files/Microsoft Visual Studio 8/VC#/Snippets/2052/Visual C#文件夹,里面都是预定义的代码段。下面演示一下添加如何增加一个“try{}catch{}finally{}”的代码段。
首先将“try.snippet”拷贝到桌面,改名为“trycf.snippet”,然后用Visual Studio 2005打开,会看到如下代码:
- <?xml version="1.0" encoding="utf-8"?>
- <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <Title>try</Title>
- <Shortcut>try</Shortcut>
- <Description>try catch 的代码段</Description>
- <Author>Microsoft Corporation</Author>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- <SnippetType>SurroundsWith</SnippetType>
- </SnippetTypes>
- </Header>
- <Snippet>
- <Declarations>
- <Literal>
- <ID>expression</ID>
- <ToolTip>异常类型</ToolTip>
- <Function>SimpleTypeName(global::System.Exception)</Function>
- </Literal>
- </Declarations>
- <Code Language="csharp"><![CDATA[try
- {
- $selected$
- }
- catch ($expression$)
- {
- $end$
- throw;
- }]]>
- </Code>
- </Snippet>
- </CodeSnippet>
- </CodeSnippets>
<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>try</Title> <Shortcut>try</Shortcut> <Description>try catch 的代码段</Description> <Author>Microsoft Corporation</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> <SnippetType>SurroundsWith</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>expression</ID> <ToolTip>异常类型</ToolTip> <Function>SimpleTypeName(global::System.Exception)</Function> </Literal> </Declarations> <Code Language="csharp"><![CDATA[try { $selected$ } catch ($expression$) { $end$ throw; }]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>
我们将上面的代码改为如下形式:
- <?xml version="1.0" encoding="utf-8"?>
- <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
- <CodeSnippet Format="1.0.0">
- <Header>
- <Title>trycf</Title>
- <Shortcut>trycf</Shortcut>
- <Description>try catch finally的代码段</Description>
- <Author>周金桥</Author>
- <SnippetTypes>
- <SnippetType>Expansion</SnippetType>
- <SnippetType>SurroundsWith</SnippetType>
- </SnippetTypes>
- </Header>
- <Snippet>
- <Declarations>
- <Literal>
- <ID>expression</ID>
- <ToolTip>异常类型</ToolTip>
- <Function>SimpleTypeName(global::System.Exception)</Function>
- </Literal>
- </Declarations>
- <Code Language="csharp"><![CDATA[try
- {
- $selected$
- }
- catch ($expression$ exception)
- {
- $end$
- throw;
- }
- finally
- {
- }
- ]]>
- </Code>
- </Snippet>
- </CodeSnippet>
- </CodeSnippets>
<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>trycf</Title> <Shortcut>trycf</Shortcut> <Description>try catch finally的代码段</Description> <Author>周金桥</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> <SnippetType>SurroundsWith</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>expression</ID> <ToolTip>异常类型</ToolTip> <Function>SimpleTypeName(global::System.Exception)</Function> </Literal> </Declarations> <Code Language="csharp"><![CDATA[try { $selected$ } catch ($expression$ exception) { $end$ throw; } finally { } ]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>
这里对几个部分做一下简单介绍:
Shortcut:快捷键,将来在代码中敲入这部分然后键入Tab键就能使用这个代码段。
Description:代码段描述。
Author:代码段的作者。
Code Language="csharp":表示这是C#语言的代码段。
<![CDATA[]]>:代码段代码,用户使用快捷键时将会在光标处插入这些代码。
$end$:这是一个特殊参数,用于指定用户在代码段字段中填写完内容并按下 Enter 键后光标所在的位置。
$selected$:这是一个特殊参数,只对 SurroundsWith 类型的代码段有意义。
将上面改造后的“trycf.snippet”放到[系统分区]: /Program Files/Microsoft Visual Studio 8/VC#/Snippets/2052/Visual C#文件夹下,打开代码,敲入“trycf”会看到如下结果:
选择“trycf”后再按Tab键,得到如下代码:
发布网站
和asp和php代码嵌入到网页中不同,如果我们采用了页面与代码分离的模式进行Web网站的开发,那么我们就可以在发布时对我们的网站代码做一定的保密处理,这种处理就是隐藏掉与aspx页面相关的代码,这种办法可以限制别人直接查看我们的代码。
下面以我们刚刚建立的网站为例,在网站上点击鼠标右键,出现如下菜单:
选择“发布网站”后出现如下界面:
选择合适的位置,然后点“确定”,等窗口下方的状态条出现“发布成功”之后就算是完成发布了,如下图:
这时我们可以到刚才指定的文件夹下查看生成后的网站。如下图:
需要说明的是虽然在开发状态下网站中有App_Code和App_Data及Bin文件夹,在生成网站的时候网站会根据具体情况来决定是否生成相应的文件和文件夹。下图是我的一个实际项目生成之后的网站截图:
实际运行的时候只需要将这个文件夹放到目标服务器上设置成网站或者虚拟目录并配置好数据库即可访问。