您可以在Visual Studio创建一个vspackage 。vspackage是一个软件模块,可以分发给其他人,使他们能够扩展Visual Studio功能。
通过使用Visual Studio中的vspackage向导,在创建vspackage项目时Visual Studio自动为vspackage项目创建必需的资源文件和配置文件。 该项目包括已您的项目名称命名的类。这个类是整个VSpackage的基础,其中包括决定如何工作在Visual Studio的属性 。包含初始化代码和其他代码,如菜单命令处理等。
本教程教如何创建一个vspackage,如下:
- 使用向导创建一个vspackage。
- 执行菜单命令处理程序。
- 添加一个键盘快捷键。
- 添加自定义信息到Visual Studio启动画面和关于对话框。
- 获取和使用vspackage Key。
使用向导创建一个vspackage
在本节中,您在Visual Studio中创建一个vspackage解决方案 。
- 打开Visual Studio 。
- 在文件菜单上, 指向新建,然后单击项目 。 在新建项目对话框中,展开其他项目类型 ,然后单击可扩展性 。 根据安装的Visual Studio模板 ,选择Visual Studio Integration Package 。 选择创建解决方案的目录 ,然后在名称字段中,键入First。 输入解决方案位置,例如, D : \ extendvs 。
单击确定 。 - 在向导欢迎页上,单击下一步 。
- 在选择程序语言页,选择Visual C # ,选择生成一个新的密钥文件 ,然后单击下一步 。
- 在 Basic VSPackage Information 页,在VSPackage name框中,键入FirstPackage ,其它为默认值。
单击下一步 。 - 在 Select VSPackage Opeions 页,勾选Menu Command ,然后单击下一步 。
- 在 Command Opeions 页,在命令名称框中,键入My First Command 。(这个命令名称会在Visual Studio菜单中出现 。)在命令编号框中,键入cmdidFirstCommand 。(此标识符将被在代码中应用以确定命令)
单击下一步 。 - 在 Select Test Options 页, 单击完成 。
向导会创建已具有基本功能的Visual Studio项目。您可以尝试按下F5 ,打开Visual Studio实验室调试该项目 。 - 在Visual Studio实验室调试界面的工具菜单上,第一个命令就是您通过向导创建的命令。
- 单击 My Frist Command 命令 。 将提示以下信息。
检查这个菜单命令的处理程序
当您在工具菜单点击该命令,处理该菜单命令的代码。 在firstpackage.cs文件中。
逐步检查处理程序
- 在解决方案资源管理器 ,打开FirstPackage.cs 。
- 找到 FirstPackage 类。 这个 FirstPackage 类的定义如下。
public sealed class FirstPackage : Package
通知Package类来自WPF。 - 找到菜单处理程序,是由MenuitemCallback方法执行。该菜单处理函数是一个典型的Windows窗体的事件处理方法。
private void MenuItemCallback(object sender, EventArgs e)
{
IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));
Guid clsid = Guid.Empty;
int result;
Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(
uiShell.ShowMessageBox(
0, ref clsid,
"FirstPackage",
string.Format(CultureInfo.CurrentCulture,
"Inside {0}.MenuItemCallback()", this.ToString()),
string.Empty, 0,
OLEMSGBUTTON.OLEMSGBUTTON_OK,
OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
OLEMSGICON.OLEMSGICON_INFO,
0, out result));
}
添加一个键盘快捷键
默认情况下,在菜单上创建的命令没有快捷键。您可以为My First Command添加一个快捷键。
添加一个默认的键盘快捷键
- 在解决方案资源管理器 ,打开first.vsct 。
- 找到</Commands>标记。
- 将以下代码添加在</Commands> 标记和<Symbols>之间的空白处。
<KeyBindings>
<KeyBinding guid="guidFirstCmdSet" id="cmdidFirstCommand" editor="guidVSStd97" key1="M" mod1="Control Shift"/>
</KeyBindings>
这KeyBindings元素,有若干属性。该guid和id属性确定哪些命令将接收到键盘快捷键。 这个guid是当前vspackage项目的guid , id是在向导中创建的命令标识。这两个符号的定义是在符号节,内容如下。
<Symbols>
<GuidSymbol name="guidFirstCmdSet" value="{600efde8-1f5e-4df5-bc22-06074a411975}">
<IDSymbol name="cmdidFirstCommand" value="0x0100" />
</GuidSymbol>
- 在调试菜单上,单击开始调试 。
在Visual Studio实验环境下 ,按Ctrl + Shift +M 显示调用My First Command命令 。
- 按Ctrl + Shift +M。 您应该可以看到与点击My First Command相同的信息。
有关vsct文件信息见VSCT XML Schema Reference
添加自定义信息到欢迎界面或关于界面
为能在关于界面包含图标和自定义信息,你必须在解决方案中作出以下更改:
1. 打开firstpackage.cs ,找到InstalledProductRegistration特性,并修改为如下所示。
[InstalledProductRegistration(true, null, null, null)]
2. 在FirstPackage类继承IVsInstalledProduct接口。
public sealed class FirstPackage : Package, IVsInstalledProduct
3. 显示实现 IVsInstalledProduct接口,在FirstPackage类中生成IVsInstalledProduct接口方法如下
public int IdBmpSplash(out uint pIdBmp)
{
throw new NotImplementedException();
}
public int IdIcoLogoForAboutbox(out uint pIdIco)
{
throw new NotImplementedException();
}
public int OfficialName(out string pbstrName)
{
throw new NotImplementedException();
}
public int ProductDetails(out string pbstrProductDetails)
{
throw new NotImplementedException();
}
public int ProductID(out string pbstrPID)
{
throw new NotImplementedException();
}
4. 从<Visual Studio SDK >安装目录找到以下路径VisualStudioIntegration\Samples\IDE\CSharp\Reference.Package\ 拷贝genericpackage.bmp和genericpackage.ico文件到当前项目的资源文件夹中。
5. 在解决方案资源管理器中,右键单击资源文件夹,指向添加 ,然后单击现有的项目 。设置文件过滤器为*.*。然后添加genericpackage.bmp 。重复此步骤以添加genericpackage.ico 。
6. 在解决方案资源管理器中右键单击vspackage.resx ,然后单击查看代码。在XML编辑器中打开vspackage.resx文件。
7. 在 </root> 标记前添加以下代码。
<data name="500" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\GenericPackage.bmp; System.Drawing.Bitmap,System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a </value>
</data>
<data name="600" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\GenericPackage.ico; System.Drawing.Icon,System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
</value>
</data>
以上标记声明了GenericPackage.bmp 的资源ID为 500, GenericPackage.iso 的资源ID为 600.
8. 在firstpackage.cs 中,使用下面的代码替换执行IVsInstalledProduct接口方法中的代码。
public int IdBmpSplash(out uint pIdBmp)
{
pIdBmp = 500;
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int IdIcoLogoForAboutbox(out uint pIdIco)
{
pIdIco = 600;
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int OfficialName(out string pbstrName)
{
pbstrName = "My Package";
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int ProductDetails(out string pbstrProductDetails)
{
pbstrProductDetails = "This is my package";
return Microsoft.VisualStudio.VSConstants.S_OK;
}
public int ProductID(out string pbstrPID)
{
pbstrPID = "My Package ID";
return Microsoft.VisualStudio.VSConstants.S_OK;
}
前两个方法返回的资源识别码为位图和图标。其余三个函数返回的名称,产品详细资料,和产品ID ,他们将出现在关于对话框。
在完成下列修改后,你可以测试程序的变化。
测试初始屏幕和对话框定制
1. 在解决方案资源管理器中,右键单击Frist项目节点,然后单击属性 。
2. 单击调试 。
3. 在调试界面命令行参数输入框中,添加/splash。
4. 按F5以打开Visual Studio在实验室调试。
开机画面出现,并显示有关您的VS综合包信息 。单击OK以继续。
5. 在帮助菜单上,单击关于Microsoft Visual Studio 。
在关于对话框,将显示您VS综合包中定义的图标和文字 。
获取和使用一个包读取私钥(PLK)
当您分发VS综合包给其他使用者,它必须包含一个资源名为包读取私钥(PLK) 。除了在实验室调试时, Visual Studio无法读取不包含一个有效私钥VS综合包。
在Visual Studio SDK提供了一个特别的开发私钥(DLK)用于调试时读取VS综合包 。 但 Microsoft软件许可条款中限制Visual Studio SDK重新分发DLK。
对于本教程,我们将提供一个PLK,使您不必为自己使用重新获取。PLK的值取自VS综合包的GUID ,在此教程中您创建一个VS综合包 使用PLK,您必须修改VS综合包的GUID ,以配合自动产生PLK。
修改vspackage的GUID ,以配合提供PLK
1. 打开first.vsct并且修改GuidSymbol标记的value的值如下。
<GuidSymbol name="guidFirstPkg" value="{3fdab115-3cc1-457d-bd2a-78d72c7025be}" />
2. 打开guid.cs并且修改guidfirstpackagestring 的值如下。
public const string guidFirstPkgString="3fdab115-3cc1-457d-bd2a-78d72c7025be";
完成下列程序,将 PLK 添加到 VS综合包。
在这个VS综合包中添加PLK
1. 在解决方案资源管理器中,双击vspackage.resx以打开它在资源设计界面。
2. 新增资源名称为104 。在值栏,输入以下PLK。JEAPP8CCIKQCA0IRC9ZECMDRPZEZP2E3HPA9MRETM0CKJKK3JEKDAIDMKQR2EHK2CJKCQJKHAMQTAKDKIZPHM8KDCMC0AIEME0KAKAACCMM1QHH2ECEKH1JIQQIEZIPR
3. 打开First1Package.cs ,找到provideloadkey特性。替换资源名称为104
[ProvideLoadKey("Standard", "1.0", "FirstPackage", "Company", 104)]
完成下列程序测试PLK
测试PLK
1. 在解决方案资源管理器中 ,右键单击第一个项目节点,然后单击属性 。
2. 单击调试 。
3. 在命令行参数栏中添加/noVSIP 。这样将禁用DLK 。
4. 按F5以打开Visual Studio在实验模式调试。
5. 在帮助菜单上,单击关于Microsoft Visual Studio 。
出现关于对话框,并显示图标和文字为您vspackage 。
6. 关闭调试的实验室Visual Studio 。
7. 在资源管理器中任意修改PLK的值。
8. 按F5以打开Visual Studio在实验模式调试,然后看看关于对话框中的显示信息。
这个时候你应该看到一条消息,提示您读取PLK