Lanciare un editor fileless

Normalmente, gli editor in Visual Studio e nelle applicazioni su di esso basate sono lanciati eseguendo doppio click del mouse sul nodo relativo al file che si vuole modificare, all’interno dell’albero del progetto corrente.

A volte però, può essere necessario aggiungere all’applicazione basata su VS Shell 2008 Isolated (o a un generico progetto di estensibilità di Visual Studio 2008) che si sta sviluppando, la possibilità di lanciare un editor “fileless”, ovvero che non è associato ad alcun file nella gerarchia di progetto. Un tale editor potrebbe infatti attingere le informazioni presentate da database, da un insieme di file non appartenenti al progetto, dalla rete, etc…

Questo articolo descrive un possibile metodo per realizzare un editor fileless; questo è l’approccio che ho “trovato” io e non è assolutamente detto che sia il metodo corretto!

In questo esempio è stato usato il wizard di Visual Studio per creare un nuovo package, contenente un editor e un comando di menù, che verrà modificato in modo da lanciare l’editor senza clickare su alcun file. Inoltre, questo package è stato creato e aggiunto a un progetto Visual Studio Shell, ma può anche essere utilizzato al di fuori di Visual Studio Shell, come package per Visual Studio.

Addentriamoci nei dettagli!

Visual Studio Shell 2008 (Isolated): risorse utili

Ecco alcuni link a risorse che ho trovato particolarmente utili per iniziare a sviluppare applicazioni basate su Visual Studio Shell 2008 (Isolated Mode).

Blog, articoli, tutorial, librerie…

DSL Tools and Visual Studio 2008 Isolated Shell (tutorial)

Un ottimo tutorial, tratto da Christian Bækdorf’s .NET Blog, che descrive tutti i passi per realizzare un’applicazione basata su Visual Studio Shell Isolated, con particolare riguardo verso i Domain-Specific Language Tools. Le tematiche trattate includono anche: la creazione di un progetto “custom” basato su MPFProj, la generazione delle “load keys” per la Shell e i Package utilizzati e infine la creazione del progetto di setup per l’applicazione. Caldamente consigliato!

How do I pick what features are included in my VS Shell (isolated) based application?

Ok, è possibile rimuovere funzionalità e componenti dalla nostra applicazione basata su Visual Studio Shell, inserendo nel file .pkgundef le chiavi di registry corrispondenti alle funzionalità da eliminare. Ma quali sono queste chiavi? Eccolo spiegato in questo articolo, tratto dal blog: James @ MS.

INFO: List of known project type Guids

La lista dei GUID dei vari tipi (e sottotipi, detti anche “flavors”) di progetti gestiti da Visual Studio, stilata da Carlos J. Quintero.

Pablo Galiano pga weblog

Un blog ricco di articoli utili e interessanti.

Visual Studio Managed Package Framework for Projects (MPFProj)

Una libreria che facilita la creazione di progetti in Visual Studio (e quindi anche Visual Studio Shell); è utilizzata in parecchi progetti e tutorial citati in questo articolo. Attenzione: attualmente è disponibile il codice sorgente sotto “Source Code”; la sezione “Downloads” non contiene alcun file!

Visual Studio Shell-Based Applications e altre risorse su MSDN

Sezione della MSDN Library dedicata allo sviluppo di applicazioni basate su Visual Studio Shell (sia Integrated che Isolated).

Gli ambienti di runtime per il deploy delle applicazioni basate su shell, come anche il Visual Studio 2008 SDK (necessario per lo sviluppo di applicazioni basate su VS Shell), possono essere scaricati dal Visual Studio Extensibility Developer Center.

Ulteriori informazioni sono disponibili anche sul VSX Team Blog.

Applicazioni basate su VS Shell

IronPython Studio

Un IDE completo e gratuito (open source) per il linguaggio di programmazione Python, basato su Visual Studio 2008 Shell e disponibile sia in modalità Isolated che in modalità Integrated. A mio avviso una delle applicazioni basate su Shell più complete.

AddOn Studio for World of Warcraft

Un ambiente open source per sviluppare AddOn per World of Warcraft.

Storyboard Designer

Un’altra applicazione open source di esempio basata su Visual Studio Shell, Isolated mode.

Performance Counters non visualizzati in Performance Monitor

Non molto tempo fa, trovandomi a dover aggiungere e utilizzare dei performance counter (contatori di prestazioni) in un’applicazione .NET (Framework 3.5) a cui stavo lavorando, mi sono imbattutto in un curioso problema.   

In pratica, ho aggiunto all’applicazione la possibilità, durante l’esecuzione, di creare e aggiornare alcuni performance counters, che però non venivano visualizzati nell’applicazione di sistema “Performance Monitor” (perfmon, “Prestazioni” su XP in Italiano).   

Ho provato anche con un’applicazione di esempio trovato in rete (http://perfmoncounterhelper.codeplex.com/), che ho scoperto non essere molto differente dalla mia implementazione, ma il risultato era sempre lo stesso: i contatori sono creati; posso verificarne l’esistenza col tool Server Explorer di Visual Studio, ma non è possibile utilizzarli in performance monitor, in quanto la combo “Oggetto prestazione” non presenta i contatori installati dalla mia applicazione.   

Preso dallo sconforto, ho fatto installare l’applicazione di test e i relativi contatori a due miei colleghi sui loro PC: su un sistema i contatori erano visualizzati; sull’altro no.   

A questo punto è subito sorto il dubbio sulla lingua di sistema: infatti l’unico sistema su cui i contatori erano visibili era quello in Inglese, mentre nei due sistemi in Italiano non erano visibili.   

Ho quindi indagato e poco dopo ho scoperto che sul registry di Windows i contatori sono memorizzati in
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib   

Fig. 1: Informazioni sui contatori di prestazioni nel registry di Windows.

Sul mio sistema sono presenti due sottochiavi:   

  • 009”, che ho scoperto contenere le informazioni sui contatori in Inglese (US);
  • 010”, che ho scoperto contenere le informazioni sui contatori in Italiano.
Fig. 2: Contatori in Inglese (Americano) nel registry di Windows.
Fig. 3: Contatori in Italiano nel registry di Windows.

Il problema consiste quindi nel fatto che, all’installazione dei nuovi contatori, essi sono aggunti alla chiave “009” (Inglese), mentre perfmon permette di visualizzare i contatori in Italiano, le cui informazioni si trovano alla chiave “010”.

Finalmente, ho risolto copiando con regedit il contenuto delle chiavi “Counter” e “Help” da “009” a “010”: così facendo in perfmon riesco a vedere i nuovi contatori, al costo (direi trascurabile) di avere tutti i nomi degli oggetti in Inglese.

Fig 4: I contatori in Italiano (prima della copia dei valori nel registry).
Fig. 5: I contatori in Inglese (dopo la copia dei valori nel registry)
Fig. 6: È finalmente possibile aggiungere il contatore in perfmon.
Fig. 7: È finalmente possibile monitorare il contatore in perfmon.

Ovviamente, se qualcuno fosse a conoscenza di un metodo per poter aggiungere da codice i contatori a un sistema Windows XP non in lingua Inglese (US) è caldamente invitato a lasciare un commento 🙂 🙂 🙂

Grazie per la lettura!