Determinare quale editor apre un file in un progetto

Quando un utente apre un file in un progetto, l'ambiente passa attraverso un processo di polling, aprendo infine l'editor o la finestra di progettazione appropriata per tale file. La procedura iniziale utilizzata dall'ambiente è la stessa per gli editor standard e personalizzati. L'ambiente usa un'ampia gamma di criteri durante il polling dell'editor da usare per aprire un file e il VSPackage deve coordinarsi con l'ambiente durante questo processo.

Ad esempio, quando un utente seleziona il comando Apri dal menu File e quindi sceglie filename.rtf (o qualsiasi altro file con estensione RTF ), l'ambiente chiama l'implementazione IsDocumentInProject per ogni progetto, alla fine ciclo attraverso tutte le istanze del progetto nella soluzione. I progetti restituiscono un set di flag che identificano le attestazioni in un documento per priorità. Usando la priorità più alta, l'ambiente chiama il metodo appropriato OpenItem . Per altre informazioni sul processo di polling, vedere Aggiungere modelli di progetto e di elementi di progetto.

Il progetto File esterni dichiara tutti i file che non sono richiesti da altri progetti. In questo modo, gli editor personalizzati possono aprire documenti prima che gli editor standard li apra. Se un progetto File esterni richiede un file, l'ambiente chiama il OpenStandardEditor metodo per aprire il file con un editor standard. L'ambiente controlla l'elenco interno di editor registrati per uno che gestisce i file RTF . Questo elenco si trova nel Registro di sistema nella chiave seguente:

HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\<version>\Editors\<editor factory guid>\Extensions

L'ambiente controlla anche gli identificatori di classe nella chiave HKEY_CLASedizione StandardS_ROOT\CLSID per tutti gli oggetti con una sottochiave DocObject. Se l'estensione di file è presente, viene creata una versione incorporata dell'applicazione, ad esempio Microsoft Word, sul posto in Visual Studio. Questi oggetti documento devono essere file composti che implementano l'interfaccia IPersistStorage oppure l'oggetto deve implementare l'interfaccia IPersistFileFormat .

Se nel Registro di sistema non è presente alcuna factory dell'editor per i file RTF, l'ambiente cerca nella chiave HKEY_CLASedizione StandardS_ROOT\.rtf e apre l'editor specificato. Se l'estensione di file non viene trovata in HKEY_CLASedizione StandardS_ROOT, l'ambiente usa l'editor di testo principale di Visual Studio per aprire il file, se si tratta di un file di testo.

Se l'editor di testo principale ha esito negativo, che si verifica se il file non è un file di testo, l'ambiente usa l'editor binario per il file.

Se l'ambiente trova un editor per l'estensione rtf nel registro, carica il VSPackage che implementa questa factory dell'editor. L'ambiente chiama il SetSite metodo nel nuovo VSPackage. VsPackage chiama QueryService per SID_SVsRegistorEditor, usando il RegisterEditor metodo per registrare la factory dell'editor con l'ambiente.

L'ambiente ora controlla nuovamente l'elenco interno degli editor registrati per trovare la nuova factory dell'editor registrata per i file RTF . L'ambiente chiama l'implementazione del CreateEditorInstance metodo , passando il nome del file e il tipo di visualizzazione da creare.