in Backwards_Compatible_AsyncPackage_2013/BackwardsCompatibleAsyncPackage/AsyncPackageHelpers/AsyncPackageRegistrationAttribute.cs [96:180]
public override void Register(RegistrationContext context) {
Type t = context.ComponentType;
Key packageKey = null;
try
{
packageKey = context.CreateKey(RegKeyName(context));
//use a friendly description if it exists.
DescriptionAttribute attr = TypeDescriptor.GetAttributes(t)[typeof(DescriptionAttribute)] as DescriptionAttribute;
if (attr != null && !String.IsNullOrEmpty(attr.Description)) {
packageKey.SetValue(string.Empty, attr.Description);
}
else {
packageKey.SetValue(string.Empty, t.Name);
}
packageKey.SetValue("InprocServer32", context.InprocServerPath);
packageKey.SetValue("Class", t.FullName);
// If specified on the command line, let the command line option override
if (context.RegistrationMethod != RegistrationMethod.Default)
{
registrationMethod = context.RegistrationMethod;
}
// Select registration method
switch (registrationMethod)
{
case RegistrationMethod.Assembly:
case RegistrationMethod.Default:
packageKey.SetValue("Assembly", t.Assembly.FullName);
break;
case RegistrationMethod.CodeBase:
packageKey.SetValue("CodeBase", context.CodeBase);
break;
}
Key childKey = null;
if (!useManagedResources)
{
try
{
childKey = packageKey.CreateSubkey("SatelliteDll");
// Register the satellite dll
string satelliteDllPath;
if (SatellitePath != null)
{
// Use provided path
satelliteDllPath = context.EscapePath(SatellitePath);
}
else
{
// Default to package path
satelliteDllPath = context.ComponentPath;
}
childKey.SetValue("Path", satelliteDllPath);
childKey.SetValue("DllName", String.Format(CultureInfo.InvariantCulture, "{0}UI.dll", Path.GetFileNameWithoutExtension(t.Assembly.ManifestModule.Name)));
}
finally
{
if (childKey != null)
childKey.Close();
}
}
if (allowsBackgroundLoad)
{
packageKey.SetValue("AllowsBackgroundLoad", true);
}
if (typeof(IVsPackageDynamicToolOwner).IsAssignableFrom(context.ComponentType) ||
typeof(IVsPackageDynamicToolOwnerEx).IsAssignableFrom(context.ComponentType))
{
packageKey.SetValue("SupportsDynamicToolOwner", Microsoft.VisualStudio.PlatformUI.Boxes.BooleanTrue);
}
}
finally
{
if (packageKey != null)
packageKey.Close();
}
}