注册和注销 VSPackages

使用属性注册 VSPackage,但

注册 VSPackage

可以使用属性来控制托管 VSPackage 的注册。 所有注册信息都包含在 .pkgdef 文件中。 有关基于文件的注册的详细信息,请参阅 CreatePkgDef 实用工具

以下代码演示如何使用标准注册属性注册 VSPackage。

[PackageRegistration(UseManagedResourcesOnly = true)]
[Guid("0B81D86C-0A85-4f30-9B26-DD2616447F95")]
public sealed class BasicPackage : Package
{
    // ...
}

取消注册扩展

如果已尝试使用许多不同的 VSPackage,并且想要从实验实例中删除它们,只需运行 Reset 命令即可。 在计算机的起始页上查找 “重置 Visual Studio 实验实例 ”,或从命令行运行以下命令:

<location of Visual Studio 2015 install>\"Microsoft Visual Studio 14.0\VSSDK\VisualStudioIntegration\Tools\Bin\CreateExpInstance.exe" /Reset /VSInstance=14.0 /RootSuffix=Exp

如果要卸载已在 Visual Studio 的开发实例上安装的扩展,请转到“工具>扩展”并汇报,找到该扩展,然后单击“卸载”。

如果出于某种原因,这些方法都不成功卸载扩展,则可以从命令行中注销 VSPackage 程序集,如下所示:

<location of Visual Studio 2015 install>\"Microsoft Visual Studio 14.0\VSSDK\VisualStudioIntegration\Tools\Bin\regpkg" /unregister <pathToVSPackage assembly>

使用自定义注册属性注册扩展

在某些情况下,可能需要为扩展创建新的注册属性。 可以使用注册属性添加新的注册表项或向现有密钥添加新值。 新属性必须派生自 RegistrationAttribute,并且必须重写 RegisterUnregister 方法。

创建自定义属性

以下代码演示如何创建新的注册属性。

[AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
public class CustomRegistrationAttribute : RegistrationAttribute
{
}

属性 AttributeUsageAttribute 类用于指定属性所属的程序元素(类、方法等),以及它是否可以多次使用,以及是否可以继承它。

创建注册表项

在以下代码中,自定义属性会在要注册的 VSPackage 的键下创建一个 Custom 子项。

public override void Register(RegistrationAttribute.RegistrationContext context)
{
    Key packageKey = null;
    try
    {
        packageKey = context.CreateKey(@"Packages\{" + context.ComponentType.GUID + @"}\Custom");
        packageKey.SetValue("NewCustom", 1);
    }
    finally
    {
        if (packageKey != null)
            packageKey.Close();
    }
}

public override void Unregister(RegistrationContext context)
{
    context.RemoveKey(@"Packages\" + context.ComponentType.GUID + @"}\Custom");
}

在现有注册表项下创建新值

可以将自定义值添加到现有键。 以下代码演示如何向 VSPackage 注册密钥添加新值。

public override void Register(RegistrationAttribute.RegistrationContext context)
{
    Key packageKey = null;
    try
    {
        packageKey = context.CreateKey(@"Packages\{" + context.ComponentType.GUID + "}");
        packageKey.SetValue("NewCustom", 1);
    }
    finally
    {
        if (packageKey != null)
            packageKey.Close();
    }
}

public override void Unregister(RegistrationContext context)
{
    context.RemoveValue(@"Packages\" + context.ComponentType.GUID, "NewCustom");
}