Visual Studio SDK教程1、如何创建一个vspackage

2009-05-31 17:11

Visual Studio SDK教程1、如何创建一个vspackage[翻译]

http://www.cnblogs.com/lzj3000/

       您可以在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解决方案 。

    
  1. 打开Visual Studio 。

  2. 在文件菜单上, 指向新建,然后单击项目 。 在新建项目对话框中,展开其他项目类型 ,然后单击可扩展性 。 根据安装的Visual Studio模板 ,选择Visual Studio Integration Package 。 选择创建解决方案的目录 ,然后在名称字段中,键入First。 输入解决方案位置,例如, D : \ extendvs 。

    单击确定 。

  3. 在向导欢迎页上,单击下一步 。

  4. 在选择程序语言页,选择Visual C # ,选择生成一个新的密钥文件 ,然后单击下一步 。

  5. 在 Basic VSPackage Information 页,在VSPackage name框中,键入FirstPackage ,其它为默认值。

    单击下一步 。

  6. 在 Select VSPackage Opeions 页,勾选Menu Command ,然后单击下一步 。

  7. 在 Command Opeions 页,在命令名称框中,键入My First Command 。(这个命令名称会在Visual Studio菜单中出现 。)在命令编号框中,键入cmdidFirstCommand 。(此标识符将被在代码中应用以确定命令)

    单击下一步 。

  8. 在 Select Test Options 页, 单击完成 。

    向导会创建已具有基本功能的Visual Studio项目。您可以尝试按下F5 ,打开Visual Studio实验室调试该项目 。

  9. 在Visual Studio实验室调试界面的工具菜单上,第一个命令就是您通过向导创建的命令。

  10. 单击 My Frist Command 命令 。 将提示以下信息。

检查这个菜单命令的处理程序

      当您在工具菜单点击该命令,处理该菜单命令的代码。 在firstpackage.cs文件中。

      逐步检查处理程序
  1. 在解决方案资源管理器 ,打开FirstPackage.cs

  2. 找到 FirstPackage 类。 这个 FirstPackage 类的定义如下。

         public sealed class FirstPackage : Package

         通知Package类来自WPF。

  3. 找到菜单处理程序,是由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添加一个快捷键。

     添加一个默认的键盘快捷键
  1. 在解决方案资源管理器 ,打开first.vsct 。

  2. 找到</Commands>标记。

  3. 将以下代码添加在</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>
  4. 在调试菜单上,单击开始调试 。

    在Visual Studio实验环境下 ,按Ctrl + Shift +M 显示调用My First Command命令 。

  5. 按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。

7_untitled

4. 按F5以打开Visual Studio在实验室调试。

开机画面出现,并显示有关您的VS综合包信息 。单击OK以继续。

5. 在帮助菜单上,单击关于Microsoft Visual Studio 。

在关于对话框,将显示您VS综合包中定义的图标和文字 。

8_untitled

获取和使用一个包读取私钥(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

没有更多推荐了,返回首页