Использование пользовательского атрибута регистрации для регистрации расширения

 

В некоторых случаях можно создать атрибут новой ШОР2йи новый регистрационный для конкретного модуля. Можно использовать атрибуты регистрации, чтобы добавить новые разделы реестра или добавить новые значения на существующие ключи. Новый атрибут должен наследовать из Unregister и он должен переопределить Register и RegistrationAttributeметоды.

Создать настраиваемый атрибут

В следующем коде показано, как создать новый атрибут ШОР2йи новый регистрационный.

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

AttributeUsageAttribute используется в классах атрибутов для идентификации элемента программы (класс, метод и т д), к которому относится атрибут ли он может использоваться несколько раз, и является ли он может быть унаследован.

Создание раздела реестра

В следующем коде настраиваемый атрибут создает пользовательский подраздел в разделе ключом VSPackage, регистрации.

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");
}