Condividi tramite


Dettagli di configurazione del controllo del codice sorgente

Per implementare il controllo del codice sorgente, è necessario configurare correttamente il sistema di progetto o l'editor per eseguire le operazioni seguenti:

  • Richiedere l'autorizzazione per la transizione allo stato modificato

  • Richiedere l'autorizzazione per salvare un file

  • Richiedere l'autorizzazione per aggiungere, rimuovere o rinominare file nel progetto

Richiedere l'autorizzazione per la transizione allo stato modificato

Un progetto o un editor deve richiedere l'autorizzazione per la transizione allo stato modificato (dirty) chiamando IVsQueryEditQuerySave2. Ogni editor che implementa IsDocDataDirty deve chiamare QueryEditFiles e ricevere l'approvazione per modificare il documento dall'ambiente prima di True restituire per IsDocDataDirty. Un progetto è essenzialmente un editor per un file di progetto e, di conseguenza, ha la stessa responsabilità di implementare il rilevamento dello stato modificato per il file di progetto come un editor di testo per i relativi file. L'ambiente gestisce lo stato modificato della soluzione, ma è necessario gestire lo stato modificato di qualsiasi oggetto a cui fa riferimento la soluzione, ma non archivia, ad esempio un file di progetto o i relativi elementi. In generale, se il progetto o l'editor è responsabile della gestione della persistenza per un elemento, è responsabile dell'implementazione del rilevamento dello stato modificato.

In risposta alla IVsQueryEditQuerySave2::QueryEditFiles chiamata, l'ambiente può eseguire le operazioni seguenti:

  • Rifiutare la chiamata alla modifica, nel qual caso l'editor o il progetto deve rimanere nello stato non modificato (pulito).

  • Indicare che i dati del documento devono essere ricaricati. Per un progetto, l'ambiente ricarica i dati per il progetto. Un editor deve ricaricare i dati dal disco tramite la relativa ReloadDocData implementazione. In entrambi i casi, il contesto nel progetto o nell'editor può cambiare quando i dati vengono ricaricati.

    È un compito complesso e difficile adattare le chiamate appropriate IVsQueryEditQuerySave2::QueryEditFiles a una codebase esistente. Di conseguenza, queste chiamate devono essere integrate durante la creazione del progetto o dell'editor.

Richiedere l'autorizzazione per salvare un file

Prima che un progetto o un editor salvi un file, deve chiamare QuerySaveFile o QuerySaveFiles. Per i file di progetto, queste chiamate vengono completate automaticamente dalla soluzione, che sa quando salvare un file di progetto. Gli editor sono responsabili dell'esecuzione di queste chiamate a meno che l'implementazione dell'editor di IVsPersistDocData2 non usi la funzione SaveDocDataToFilehelper . Se l'editor implementa IVsPersistDocData2 in questo modo, la chiamata a IVsQueryEditQuerySave2::QuerySaveFile o IVsQueryEditQuerySave2::QuerySaveFiles viene effettuata per te.

Nota

Effettuare sempre queste chiamate in modo preemptive, ovvero in un momento in cui l'editor è in grado di ricevere un annullamento.

Richiedere l'autorizzazione per aggiungere, rimuovere o rinominare file nel progetto

Prima che un progetto possa aggiungere, rinominare o rimuovere un file o una directory, deve chiamare il metodo appropriato IVsTrackProjectDocuments2::OnQuery* per richiedere l'autorizzazione dall'ambiente. Se viene concessa l'autorizzazione, il progetto deve completare l'operazione e quindi chiamare il metodo appropriato IVsTrackProjectDocuments2::OnAfter* per notificare all'ambiente che l'operazione è stata completata. Il progetto deve chiamare i metodi dell'interfaccia IVsTrackProjectDocuments2 per tutti i file (ad esempio, file speciali) e non solo i file padre. Le chiamate ai file sono obbligatorie, ma le chiamate di directory sono facoltative. Se il progetto contiene informazioni sulla directory, deve chiamare i metodi appropriati IVsTrackProjectDocuments2 , ma se non dispone di queste informazioni, l'ambiente dedurrà le informazioni sulla directory.

Il progetto non deve chiamare i metodi di all'apertura o alla chiusura del IVsTrackProjectDocuments2 progetto. I listener che desiderano queste informazioni all'avvio possono attendere l'evento OnAfterOpenSolution e scorrere la soluzione per trovare le informazioni necessarie. All'arresto, queste informazioni non sono necessarie. IVsTrackProjectDocuments2 viene fornito da SVsTrackProjectDocuments.

Per ogni azione di aggiunta, ridenominazione e rimozione, è presente un OnQuery* metodo e un OnAfter* metodo . Chiamare il OnQuery* metodo per chiedere l'autorizzazione per aggiungere, rinominare o rimuovere il file o la directory. Chiamare il OnAfter* metodo dopo che il file o la directory è stato aggiunto, rinominato o rimosso e lo stato del progetto riflette il nuovo stato.