注册和注销 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,并且必须重写 Register 和 Unregister 方法。
创建自定义属性
以下代码演示如何创建新的注册属性。
[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");
}