Compartilhar via


Detalhes de configuração de controle do código-fonte

Para implementar o controle do código-fonte, você precisa configurar corretamente o sistema ou editor do projeto para fazer o seguinte:

  • Solicitar permissão para fazer a transição para o estado alterado

  • Solicitar permissão para salvar um arquivo

  • Solicitar permissão para adicionar, remover ou renomear arquivos no projeto

Solicitar permissão para fazer a transição para o estado alterado

Um projeto ou editor deve solicitar permissão para fazer a transição para o estado alterado (sujo) chamando IVsQueryEditQuerySave2. Cada editor que implementa IsDocDataDirty deve chamar QueryEditFiles e receber aprovação para alterar o documento do ambiente antes de retornar True para IsDocDataDirtyo . Um projeto é essencialmente um editor para um arquivo de projeto e, como resultado, tem a mesma responsabilidade pela implementação do controle de estado alterado para o arquivo de projeto que um editor de texto faz para seus arquivos. O ambiente manipula o estado alterado da solução, mas você deve manipular o estado alterado de qualquer objeto ao qual a solução faz referência, mas não armazena, como um arquivo de projeto ou seus itens. Em geral, se o seu projeto ou editor for responsável por gerenciar a persistência de um item, ele será responsável por implementar o controle de estado alterado.

Em resposta à IVsQueryEditQuerySave2::QueryEditFiles chamada, o ambiente pode fazer o seguinte:

  • Rejeitar a chamada para alteração, caso em que o editor ou projeto deve permanecer no estado inalterado (limpo).

  • Indique que os dados do documento devem ser recarregados. Para um projeto, o ambiente recarregará os dados para o projeto. Um editor deve recarregar os dados do disco através de sua ReloadDocData implementação. Em ambos os casos, o contexto no projeto ou editor pode ser alterado quando os dados são recarregados.

    É uma tarefa complexa e difícil adaptar chamadas apropriadas IVsQueryEditQuerySave2::QueryEditFiles a uma base de código existente. Como resultado, essas chamadas devem ser integradas durante a criação do projeto ou editor.

Solicitar permissão para salvar um arquivo

Antes de um projeto ou editor salvar um arquivo, ele deve chamar QuerySaveFile ou QuerySaveFiles. Para arquivos de projeto, essas chamadas são concluídas automaticamente pela solução, que sabe quando salvar um arquivo de projeto. Os editores são responsáveis por fazer essas chamadas, a menos que a implementação do editor use IVsPersistDocData2 a função SaveDocDataToFileauxiliar. Se o seu editor implementar IVsPersistDocData2 dessa maneira, então a chamada para ou IVsQueryEditQuerySave2::QuerySaveFiles é feita para IVsQueryEditQuerySave2::QuerySaveFile você.

Observação

Sempre faça essas chamadas preventivamente, ou seja, no momento em que seu editor puder receber um cancelamento.

Solicitar permissão para adicionar, remover ou renomear arquivos no projeto

Antes que um projeto possa adicionar, renomear ou remover um arquivo ou diretório, ele deve chamar o método apropriado IVsTrackProjectDocuments2::OnQuery* para solicitar permissão do ambiente. Se a permissão for concedida, o projeto deverá concluir a operação e, em seguida, chamar o método apropriado IVsTrackProjectDocuments2::OnAfter* para notificar o ambiente de que a operação foi concluída. O projeto deve chamar os IVsTrackProjectDocuments2 métodos da interface para todos os arquivos (por exemplo, arquivos especiais) e não apenas os arquivos pai. As chamadas de arquivo são obrigatórias, mas as chamadas de diretório são opcionais. Se o seu projeto tiver informações de diretório, ele deverá chamar os métodos apropriados IVsTrackProjectDocuments2 , mas se não tiver essas informações, o ambiente inferirá informações de diretório.

O projeto não deve chamar os métodos de IVsTrackProjectDocuments2 no projeto abrir ou fechar. Os ouvintes que desejam essas informações na inicialização podem aguardar o OnAfterOpenSolution evento e iterar pela solução para encontrar as informações de que precisam. No desligamento, essas informações não são necessárias. IVsTrackProjectDocuments2 é fornecido a partir do SVsTrackProjectDocuments.

Para cada ação de adicionar, renomear e remover, há um método e um OnQuery* OnAfter* método. Chame o método para pedir permissão para adicionar, renomear ou remover o OnQuery* arquivo ou diretório. Chame o método depois que o arquivo ou diretório tiver sido adicionado, renomeado ou removido e o estado do projeto refletir o OnAfter* novo estado.