Un’estensione per Visual Studio, by default, viene caricata e inizializzata solo ed esclusivamente nel momento in cui l’utente cerca di interagirvi, quindi ad esempio se iniettate un command nei menu nel momento in cui l’utente clicca sul command. mentre se l’estensione ad esempio aggiunge una ToolWindow potreste trovarvi di fronte a comportamenti un po’ bizzarri:
  • Visual Studio parte e la ToolWindow non è presente tra quelle visibili: il package non viene inizializzato;
  • Visual Studio parte e la ToolWindow è presente tra quelle visibili ma non visualizzate (ad esempio perché è collapsed): il package non viene inizializzato;
  • Visual Studio parte e la ToolWindow è presente tra quelle visibili ed è effettivamente visibile: il package viene inizializzato;
Ora…è ovvio che non potete fare affidamento sul layout di Visual Studio per inizializzare il vostro package, se quindi avete bisogno di il vostro package venga inizializzato (invocato alla fine della fiera) in momenti ben precisi del ciclo di vita dell’IDE potete decorarlo con un attributo:
[ProvideToolWindow( typeof( MyToolWindowPane ) )]
[ProvideAutoLoad( UIContextGuids.NoSolution )]
public sealed class MyPackage : Package
L’attributo “ProvideAutoLoad” serve proprio per spiegare all’IDE che vogliamo essere invocati in determinati contesti, NoSolution identifica il contesto di default di Visual Studio in fase di avvio, quindi se vogliamo essere inizializzati durate il processo di avvio di Visual Studio e non aspettare l’interazione dell’utente ci basta marcare il nostro package con quell’attributo.
.m