Я думаю, что 280Z28 был совершенно правильным до VS2010. Но теперь VS2010 и VS012:
- Не требует официально подписанных пакетов (могут быть только те, которые идут в Галерея );
- Благодаря VSIX он может очень легко устанавливать VSPackages, которые также могут быть развернуты в Галерее.
Более того, VS2010 поддерживает другой вид расширяемости: это расширения MEF, которые представляют собой облегченные плагины, которые запускаются только при определенных событиях IDE, таких как события текстового редактора. Примером является FixMixedTabs расширение.
Просто создайте пустой пакет VSPackage (без меню, команд, ...) и скопируйте его в основной класс, чтобы создать VSPackage, который в основном загружается при наличии активного решения и просто получает ссылку на DTE2
. Таким образом, вы можете просто использовать его как надстройку.
// This attribute tells the PkgDef creation utility (CreatePkgDef.exe) that this class is
// a package.
[PackageRegistration(UseManagedResourcesOnly = true)]
// This attribute is used to register the informations needed to show the this package
// in the Help/About dialog of Visual Studio.
[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[Guid(GuidList.guidVSPackage1PkgString)]
// Load this package when a solution is loaded (VSConstants.UICONTEXT_SolutionExists)
[ProvideAutoLoad("{f1536ef8-92ec-443c-9ed7-fdadf150da82}")]
public sealed class VSPackage1Package : Package
{
/// <summary>
/// Default constructor of the package.
/// Inside this method you can place any initialization code that does not require
/// any Visual Studio service because at this point the package object is created but
/// not sited yet inside Visual Studio environment. The place to do all the other
/// initialization is the Initialize method.
/// </summary>
public VSPackage1Package()
{
Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString()));
}
/// <summary>
/// Initialization of the package; this method is called right after the package is sited, so this is the place
/// where you can put all the initilaization code that rely on services provided by VisualStudio.
/// </summary>
protected override void Initialize()
{
Trace.WriteLine (string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString()));
base.Initialize();
IVsExtensibility extensibility =
GetService(typeof(EnvDTE.IVsExtensibility)) as
IVsExtensibility;
DTE2 dte = extensibility.GetGlobalsObject(null).DTE as DTE2;
}
}