如何:署名 VSPackage (C# 和 Visual Basic)

若要显示 有关 对话框和初始屏幕, Vspackage 必须实现 IVsInstalledProduct 接口。 这提供下列信息。 Visual Studio:

  • 名称

  • ID,例如序列化的或版本号

  • 信息

  • 徽标图标

下面的代码是从 Visual Studio 扩展性示例

实现接口 IVsInstalledProduct

  1. 添加 InstalledProductRegistrationAttribute 属性设置为实现 VSPackage 的类。 此类必须从 PackageIVsInstalledProduct派生。

    <InstalledProductRegistration(True, Nothing, Nothing, Nothing)> _
    <DefaultRegistryRoot("Software\Microsoft\VisualStudio\8.0")> _
    <PackageRegistration(UseManagedResourcesOnly:=True)> _
    <Guid("EEE474A0-083B-4e9c-B453-F6FCCEDA2577")> _
    Public NotInheritable Class PackageSplashHelpAboutLoadKey
        Inherits Package
        Implements IVsInstalledProduct
    
    [InstalledProductRegistration(true, null, null, null)]
    [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\8.0")]
    [PackageRegistration(UseManagedResourcesOnly = true)]
    [Guid("EEE474A0-083B-4e9c-B453-F6FCCEDA2577")]
    public sealed class PackageSplashHelpAboutLoadKey : 
        Package, IVsInstalledProduct
    

    第一个参数, UseInterfaceInstalledProductRegistrationAttribute 特性通知 Visual Studio 使用 IVsInstalledProduct 获取产品信息,而不是 InstalledProducts 注册表项。 其余的参数选择字符串资源显示产品名称、详细信息和 ID,分别。 但是,在中,因为第一个参数是 true,其余的参数是 null。

  2. 右击 IVsInstalledProduct,指向 实现接口,然后单击 实现接口

  3. 使用下面的代码中,实现 IVsInstalledProduct

    Public Function IdBmpSplash(ByRef pIdBmp As UInteger) As Integer _
        Implements IVsInstalledProduct.IdBmpSplash
        pIdBmp = 300
        Return VSConstants.S_OK
    End Function 
    Public Function IdIcoLogoForAboutbox(ByRef pIdIco As UInteger) As Integer _
        Implements IVsInstalledProduct.IdIcoLogoForAboutbox
        pIdIco = 400
        Return VSConstants.S_OK
    End Function 
    Public Function OfficialName(ByRef pbstrName As String) As Integer _
        Implements IVsInstalledProduct.OfficialName
        pbstrName = GetResourceString("@101")
        Return VSConstants.S_OK
    End Function 
    Public Function ProductDetails(ByRef pbstrProductDetails As String) As Integer _
        Implements IVsInstalledProduct.ProductDetails
        pbstrProductDetails = GetResourceString("@102")
        Return VSConstants.S_OK
    End Function 
    Public Function ProductID(ByRef pbstrPID As String) As Integer _
        Implements IVsInstalledProduct.ProductID
        pbstrPID = GetResourceString("@104")
        Return VSConstants.S_OK
    End Function 
    Public Function GetResourceString(ByVal resourceName As String) As String 
        Dim resourceValue As String 
        Dim resourceManager As IVsResourceManager = DirectCast(GetService(GetType(SVsResourceManager)), IVsResourceManager)
        If resourceManager Is Nothing Then 
            Throw New InvalidOperationException("Could not get SVsResourceManager service. Make sure that the package is sited before calling this method")
        End If 
        Dim packageGuid As Guid = Me.[GetType]().GUID
        Dim hr As Integer = resourceManager.LoadResourceString(packageGuid, -1, resourceName, resourceValue)
        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr)
        Return resourceValue
    End Function
    
    public int IdBmpSplash(out uint pIdBmp)
    {
        pIdBmp = 300;
        return VSConstants.S_OK;
    }
    public int IdIcoLogoForAboutbox(out uint pIdIco)
    {
        pIdIco = 400;
        return VSConstants.S_OK;
    }
    public int OfficialName(out string pbstrName)
    {
        pbstrName = GetResourceString("@101");
        return VSConstants.S_OK;
    }
    public int ProductDetails(out string pbstrProductDetails)
    {
        pbstrProductDetails = GetResourceString("@102");
        return VSConstants.S_OK;
    }
    public int ProductID(out string pbstrPID)
    {
        pbstrPID = GetResourceString("@104");
        return VSConstants.S_OK;
    }
    public string GetResourceString(string resourceName)
    {
        string resourceValue;
        IVsResourceManager resourceManager =
            (IVsResourceManager)GetService(typeof(SVsResourceManager));
        if (resourceManager == null)
        {
            throw new InvalidOperationException(
                "Could not get SVsResourceManager service. Make sure that the package is sited before calling this method");
        }
        Guid packageGuid = this.GetType().GUID;
        int hr = resourceManager.LoadResourceString(
            ref packageGuid, -1, resourceName, out resourceValue);
        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr);
        return resourceValue;
    }
    

    Visual Studio 调用这些方法来获得署名的 VSPackage 信息。 GetResourceString 方法可用于本地化此信息。

    备注

    代码注释简洁起见被删除。可以找到它们在 Visual Studio 扩展性示例

维护产品信息字符串

  1. 双击 .resx 资源文件与 VSPackage。

    资源编辑器中打开。

  2. 查找或添加产品名称、信息和 ID.

    下面的资源字符串来自 Visual Studio 扩展性示例

    • @101
      包初始屏幕和帮助涉及正式名称 (c# 中)。

    • @102
      此包演示如何显示文本和图像在初始屏幕和帮助。

    • @104
      8.0

  3. 选择和编辑此信息,您希望。

维护产品图标和位图

  1. 添加位图和图标添加到项目用作项目资源。

    有关更多信息,请参见 Adding and Editing Resources

  2. 关闭资源编辑器并重新打开在 XML 或文本编辑器的 .resx 文件。

    备注

    除了字符串之外,资源编辑器不支持分配资源 ID 到项目中。

  3. 查找或添加图标和位图资源。 .resx 文件。 下面的资源是从 Visual Studio 扩展性示例

    <data name="300" type="System.Resources.ResXFileRef, System.Windows.Forms">
        <value>GenericPackage.bmp;System.Drawing.Bitmap, System.Drawing,
            Version=2.0.0.0, Culture=neutral,         PublicKeyToken=b03f5f7f11d50a3a</value>
    </data>
    <data name="400" type="System.Resources.ResXFileRef, System.Windows.Forms">
        <value>GenericPackage.ico;System.Drawing.Icon, System.Drawing,
            Version=2.0.0.0, Culture=neutral,         PublicKeyToken=b03f5f7f11d50a3a</value>
    </data>
    

测试对话框和初始屏幕

请参见

其他资源

VSPackage 署名。