本文旨在指导开发者如何在Visual Studio 2005中创建自定义命令行开关,以便通过命令行快速执行特定操作。Visual Studio 2005提供了强大的命令行工具devenv
,它允许开发者执行多种操作,例如打开项目、设置环境等。但对于一些特定需求,如直接从命令行打开网站,并没有直接的解决方案。因此,本文将介绍如何开发一个自定义的命令行开关来实现这一功能。
要使用Visual Studio 2005版本的框架,需要安装Visual Studio 2005 SDK。对于Orcas版本,需要下载Orcas及其SDK。Orcas版本与2005版本基本相同,只是重新编译过。可以在虚拟机(Windows Server 2003)上从Microsoft下载Orcas。此外,还需要对VSPackage/插件有一定的了解。
要开发一个自定义开关,需要从CustomSwitch
层次结构继承一个新的类。创建一个构造函数,接收ISwitchPackage
接口、开关名称和命令行参数,然后调用基类。接着,覆盖Executing
函数并实现想要的功能。为了监控开关的执行,CustomSwitch
有两个事件:BeforeExecuting
和AfterExecuting
。
以下是一个打开网站的自定义开关的代码示例:
internal class OpenWebSiteSwitch : CustomSwitch
{
#region Constructors
public OpenWebSiteSwitch(ISwitchPackage package, string name, string[] parameters)
: base(package, name, parameters)
{
}
#endregion
#region Protected Functions
protected override void Executing()
{
VsWebSite.VSWebPackage webPackage = Package.DTE2.GetObject("WebPackage") as VsWebSite.VSWebPackage;
try
{
webPackage.OpenWebSite(Parameters[0], VsWebSite.OpenWebsiteOptions.OpenWebsiteOption_None, false);
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("Exception type: " + ex.GetType().ToString() + ". WebSite at path {0} cannot be loaded!", Parameters[0]);
}
}
#endregion
}
要触发事件,基类CustomSwitch
的Execute
方法实现如下:
virtual public void Execute()
{
if (!CheckContext())
throw new SwitchException(Resources.IllegalSwitchOrOption);
if (BeforeExecuting != null)
BeforeExecuting(this, null);
Executing();
if (AfterExecuting != null)
AfterExecuting(this, null);
}
有些操作只能在VS完全打开后执行,例如打开项目或网站。因此,可以在启动完成事件后执行一个开关。
在包的Initialize
函数的末尾:
EnvDTE80.DTE2 dte2 = GetService(typeof(SDTE)) as EnvDTE80.DTE2;
dte2.Events.DTEEvents.OnStartupComplete += new EnvDTE._dispDTEEvents_OnStartupCompleteEventHandler(DTEEvents_OnStartupComplete);
在事件中:
IVsAppCommandLine commandLine = GetService(typeof(SVsAppCommandLine)) as IVsAppCommandLine;
CustomSwitchEngine customSwitchEngine = new CustomSwitchEngine(this);
Collection<CustomSwitch> customSwitches = customSwitchEngine.GetCustomSwitches(commandLine);
foreach (CustomSwitch customSwitch in customSwitches)
customSwitch.Execute();
IVsAppCommandLine
是需要用于VS和命令行参数的接口。
要测试开关,可以加载SimpleSwitchFramework的代码(见前提条件),打开项目属性,在调试选项卡中,在/rootsuffix Exp后添加/AboutSwitch。当按下F5时,另一个VS实例将运行,启动完成后,将出现一个消息框。