public static void UnregisterClass(Type t)
        {
            CustomToolAttribute customToolAttribute = getCustomToolAttribute(t);

            Registry.LocalMachine.DeleteSubKey(GetKeyName(
                                                   CSharpCategoryGuid, customToolAttribute.Name), false);
        }
        public static void RegisterClass(Type t)
        {
            Type attributeType = typeof(GuidAttribute);

            object[] attributes = t.GetCustomAttributes(attributeType, /* inherit */ true);
            if (attributes.Length == 0)
            {
                throw new Exception(
                          String.Format("Class '{0}' does not provide a '{1}' attribute.",
                                        t.FullName, attributeType.FullName));
            }
            GuidAttribute       guidAttribute       = (GuidAttribute)((Attribute)attributes[0]);
            CustomToolAttribute customToolAttribute = getCustomToolAttribute(t);

            using (RegistryKey key = Registry.LocalMachine.CreateSubKey(
                       GetKeyName(CSharpCategoryGuid, customToolAttribute.Name)))
            {
                key.SetValue("", customToolAttribute.Description);
                key.SetValue("CLSID", "{" + guidAttribute.Value + "}");
                key.SetValue("GeneratesDesignTimeSource", 1);
            }
        }