为祖国健康工作50年

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

通常情况下,在开发一个asp.net的WEB网站时,若要打开WEB网站,首先要打开开发平台,选择菜单的“文件”-“打开”-“网站”,然后选择网站的根目录,最后确认后,方可打开这一网站。不像WEB应用程序,有个解决方案(*.sln),双击后可以打开(当然也可以为网站生成一个解决方案),因此以上这种方法还是比较麻烦。如果在某些应用环境中,需要按照如上的方式打开一个站点,本文利用了Visual Studio提供的命令行工具、宏以及系统注册表知识,可以实现一键完成如上操作步骤。以下以windows 2008+visual studio 2010平台为例。

备注:实际上,VS通过上述方式打开网站时,也是在内存中生成了一个sln文件,然后打开这个解决方案的,只是尚未以文件形式保存在磁盘,因此在开发平台中关闭网站时会提示是否保存它的解决方案。这一结论可以通过录制宏来判别出来。

效果图:

1 2

1.思路

想达到的效果就是如果当需要打开某一网站时,只需在其文件夹上右键,选择一个预先设置好的命令,就能打开VS开发平台,并打开这一文件夹下的网站。因此,涉及到右键调用命令问题以及命令行打开网站的问题。

2.右键调用命令

右键上去调用某一命令,这是注册表的事,这个比较简单:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\OpenVSWeb]

@="Open Folder As Website"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\OpenVSWeb\command]

@="需要执行的某一命令”

这一注册表命令,首先在右键单击文件夹时候,显示"Open Folder As Website",选择后,去执行某一命令,具体执行什么命令,是下一步的工作。

3.命令行打开网站

VS平台运行时的进程是devenv.exe,好在它也提供了命令行方式,用于打开项目。可以通过在运行中,输入devenv /?来查看具体有哪些参数。可惜的是,从介绍来看,它提供的大部分方法通常是打开一个解决方案文件或项目文件。也就是无法直接打开一个文件夹下的网站。其中有一个命令,是command参数,它用于打开VS平台后去执行某些命令。这让我想到了利用VS平台提供的宏工具,它可以用于完成手动的一些操作。

4.宏命令自动打开web站点

通过查阅,发现VS提供了EnvDTE 命名空间,它可以实现VS的自动化操作。其中的VsWebSite的VSWebPackage提供了OpenWebSite方法来将指定目录作为网站打开。

OpenWebSite("路径位置",VsWebSite.OpenWebsiteOptions.OpenWebsiteOption_None, False)

5.总结

至此,通过注册表执行了devenv,通过devenv执行了宏命令,达到一键打开web站点的目的。下面给出所有代码:

宏文件:(VS2010中编译通过,其他版本如果Imports部分报错,请适当修改或删除Imports即可)

在VS中,菜单选择:工具-宏-新建宏项目,命名为WebsiteMacroProject,为此项目添加vsWebSite.Interop引用,为项目添加一新项,命名为Website,代码:

Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics 

Public Module Website 

    Sub OpenWebsite(Optional ByVal path As String = "") 

        If (String.Compare(path, String.Empty) = 0) Then 

            MsgBox("文件夹目录无能为空!", MsgBoxStyle.OkOnly) 

        Else
            Dim webPkg As VsWebSite.VSWebPackage 

            webPkg = DTE.GetObject("WebPackage") 

            webPkg.OpenWebSite(path, VsWebSite.OpenWebsiteOptions.OpenWebsiteOption_None, False) 

        End If 

    End Sub 

End Module 

保存编译后即可。

注册表文件:复制到文本文件中,保存为*.reg(*为任意合法的文件名字符串)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\OpenVSWeb]

@="Open Folder As  Website"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\OpenVSWeb\command]

@="devenv /command \\\"Macros.WebsiteMacroProject.Website.OpenWebsite %1\\\""

保存后双击执行导入。

至此,可以在任意文件夹上右键,选择"Open Folder As Website",则系统会自动打开这一文件夹下WEB站点。

6.共享文件

我已经将整个代码打包,懒得弄的人可以点击直接下载

安装步骤:

1.将WebsiteMacroProject.vsmacros复制到一个固定位置(默认2008下vs2010的宏均放在c:\document\Visual Studio 2010\Projects\VSMacros80下,当然其他位置也可以,只要不会删除即可)

2.打开VS平台,工具-宏-加载宏项目,选择第一步中位置下的WebsiteMacroProject.vsmacros文件。

3.双击Install.reg,导入到注册表。(适合XP及其以上系统)

使用方法:

在任意文件夹上右键,选择"Open Folder As Website"即可。

卸载:

主要是去除右键的显示,执行Unstall.reg即可。

参考:

http://wenku.baidu.com/view/e70c9d2d7375a417866f8f3f.html

http://bytes.com/topic/c-sharp/answers/659130-launch-devenv-exe-open-web-site

http://weblogs.asp.net/bradleyb/archive/2005/12/09/432802.aspx

posted on 2011-02-16 09:22  lerit  阅读(7087)  评论(0编辑  收藏