Tabella di esecuzione del documento
L'ide mantiene attualmente l'elenco di tutti i documenti aperti in una struttura interna denominata tabella (RDT) in esecuzione il documento. Questo elenco include tutti i documenti aperti in memoria, indipendentemente dal fatto che questi documenti attualmente in corso la modifica. Un documento è qualsiasi elemento che viene salvato in modo permanente, incluse le stored procedure aperti negli editor nonché file in un progetto o nel file di progetto principale, ad esempio file di *.vcproj).
Elementi della Tabella in esecuzione di documento
La tabella in esecuzione il documento contiene le voci seguenti.
Elemento |
Descrizione |
---|---|
documentare il moniker |
Una stringa che identifica in modo univoco l'oggetto dati del documento. Questo è il percorso del file assoluto per un sistema di progetto che gestisce i file, ad esempio C#: \MyProject\MyFile). Questa stringa viene utilizzata anche per i progetti salvati in archivi diversi dai file system, ad esempio stored procedure in un database. In questo caso, il sistema di progetto può definire una stringa univoca in grado di riconoscere ed eventualmente analizzare per determinare come archiviare il documento. |
Proprietario della gerarchia |
L'oggetto della gerarchia che possiede il documento, come indicato da un'interfaccia di IVsHierarchy . |
ID elemento |
Identificatore dell'elemento per un elemento specifico all'interno della gerarchia. Questo valore è univoco tra tutti i documenti della gerarchia che possiede questo documento ma questo valore non è univoco tra le gerarchie diversi. |
Oggetto dati del documento |
Come minimo, questo viene IUnknown . L'ide non richiede alcuna interfaccia particolare oltre l'interfaccia di IUnknown per l'oggetto dati del documento di un editor personalizzato. Tuttavia, per un editor standard, l'implementazione dell'editor dell'interfaccia di IVsPersistDocData2 è obbligatoria gestire le chiamate di persistenza del file dal progetto. Per ulteriori informazioni, vedere Per salvare un documento standard. |
Flag |
I flag che controlla se il documento venga salvato, se un blocco di modifica o indicato viene applicato, e così via, possono essere specificati quando le voci vengono aggiunti a RDT. Per ulteriori informazioni, vedere l'enumerazione _VSRDTFLAGS. |
Conteggio dei blocchi di modifica |
Conteggio dei blocchi di modifica. Un blocco di modifica indica che una parte editor presenta il documento aperto per la modifica. Quando il conteggio di modifica blocca le transizioni da zero, l'utente viene chiesto di salvare il documento, se è stato modificato. Ad esempio, ogni volta che si apre un documento in un editor utilizzando il comando di nuova finestra , un blocco di modifica viene aggiunto per tale documento in RDT. Affinché un blocco di modifica da impostare, il documento deve avere un ID di elemento o di struttura |
Numero di blocchi in lettura |
Conteggio dei blocchi in lettura. Un blocco di lettura indica che il documento letto tramite un meccanismo una procedura guidata. Un blocco di lettura è contenuta un documento attivo in RDT mentre indica che il documento non può essere modificato. È possibile impostare un blocco in lettura anche se il documento non ha un ID di elemento o di struttura Questa funzionalità consente di aprire un documento in memoria e lo disponibile nel RDT senza il documento appartenente a una gerarchia. Questa funzionalità viene utilizzata raramente. |
Supporto di blocco |
un'istanza di un'interfaccia di IVsDocumentLockHolder . Il supporto del blocco viene implementato da funzionalità come procedure guidate aperto e la modifica vengono fornite informazioni relative all'esterno di un editor. Un supporto del blocco consente che la funzionalità di aggiungere un blocco di modifica nel documento per impedire che il documento venga chiuso mentre è ancora modifica. In genere, i blocchi di modifica vengono aggiunti solo dalle finestre di documento (ovvero editor). |
Ogni voce nel RDT dispone di una gerarchia o un ID elemento univoco associato, che corrisponde in genere a un nodo nel progetto. Tutto vengono illustrati disponibile per la modifica in genere è di proprietà di una gerarchia. Voci apportate nel controllo di RDT che progetto, o-più in modo accurata-che gerarchia, attualmente è proprietario dell'oggetto dati del documento che viene modificato. Utilizzando le informazioni nel RDT, l'ide può impedire un documento venga aperto da più di un progetto per volta.
La gerarchia verifica anche la persistenza dei dati e utilizza le informazioni nel RDT per aggiornare le finestre di dialogo di Salva con nome e di Salvare . Quando gli utenti modificano un documento e quindi il comando di uscita dal menu File, l'ide li inserisce nella finestra di dialogo di salvare le modifiche a mostrare tutti i progetti e gli elementi di progetto attualmente vengono modificati. In questo modo gli utenti scelgano di documenti da salvare. L'elenco dei documenti da salvare ovvero i documenti con modifiche) viene generato dal RDT. Tutti gli elementi che si desidera visualizzare nella finestra di dialogo di salvare le modifiche chiudendo l'applicazione deve disporre di record in RDT. Le coordinate del RDT che i documenti salvati e se l'utente è richiesta su un'operazione di salvataggio utilizzando i valori specificati nella voce di flag per ogni documento. Per ulteriori informazioni sui flag di RDT, vedere l'enumerazione di _VSRDTFLAGS .
blocchi e blocchi in lettura di modifica
I blocchi e i blocchi in lettura di modifica si trovano in RDT. Gli incrementi e i decrementi della finestra del documento alla modifica è bloccato. Pertanto, quando un utente apre una finestra di nuovo documento, gli incrementi di conteggio dei blocchi di modifica di uno. Quando il numero di modifica blocca gli intervalli zero, la gerarchia viene segnalata per rendere persistenti o salvare i dati del documento associato. La gerarchia quindi possibile rendere persistenti i dati in qualsiasi modo, inclusi mantenere come file o come elemento in un repository. È possibile utilizzare il metodo di LockDocument interfaccia di IVsRunningDocumentTable per aggiungere i blocchi e i blocchi in lettura di modifica e il metodo di UnlockDocument per rimuovere questi blocchi.
In genere, quando la finestra del documento per un editor viene creata un'istanza, la struttura della finestra aggiunge automaticamente un blocco di modifica del documento in RDT. Tuttavia, se si crea una visualizzazione personalizzata di un documento non utilizza una finestra del documento standard (ovvero non implementa l'interfaccia di IVsWindowFrame ), sarà necessario impostare il proprio blocco di modifica. Ad esempio, in una procedura guidata, un documento viene modificato senza essere aperto in un editor. In Esplora soluzioni, fare clic con il pulsante destro del mouse sulla cartella Risorse, selezionare Aggiungi, quindi fare clic su Elemento esistente. Per registrare il supporto del blocco del documento, chiamare il metodo di RegisterDocumentLockHolder e passare nell'implementazione di IVsDocumentLockHolder . In tal modo viene aggiunto il supporto del blocco del RDT. Un altro scenario per implementare il supporto di blocco del documento è se si apre un documento mediante una finestra degli strumenti speciale. In questo caso, non è possibile fare chiudere la finestra degli strumenti del documento. Tuttavia, la registrazione come un supporto del blocco del documento in RDT, l'ide possibile chiamare l'implementazione del metodo di CloseDocumentHolder per richiedere una fine del documento.
Altri utilizzi della Tabella in esecuzione di documento
Altre entità nell'IDE viene utilizzato il RDT per ottenere informazioni sui documenti. Ad esempio, l'amministratore del controllo del codice sorgente utilizza il RDT in modo che il sistema di ricaricare un documento nell'editor, dopo che ottiene la versione più recente del file. A tale scopo, l'amministratore del controllo del codice sorgente individuare i file in RDT per verificare se qualsiasi di questi viene aperto. Se sono, quindi del controllo del codice sorgente dei controlli in primo luogo viene verificato che la gerarchia implementa il metodo di ReloadItem . Se il progetto non implementa il metodo di ReloadItem , i controlli di gestione controllo del codice sorgente per l'implementazione del metodo di ReloadDocData sull'oggetto dati del documento direttamente.
L'ide viene utilizzato anche il RDT per eseguire nuovamente la superficie (portare all'inizio) di un documento aperto, quando un utente che descrivono. Per ulteriori informazioni, vedere Visualizzare i file utilizzando il comando del file aperto. Per determinare se un file viene aperto in RDT, effettuare una delle seguenti operazioni.
Query per il moniker del documento (ovvero il percorso completo dei documenti) da verificare se l'elemento è aperto.
Utilizzare la gerarchia o un ID elemento per chiedere il sistema del progetto il percorso completo dei documenti e individuare l'elemento al RDT.