Compartilhar via


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

Para implementar o controle do código-fonte, você precisa configurar corretamente seu sistema de projeto ou editor 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 IsDocDataDirty. Um projeto é essencialmente um editor para um arquivo de projeto e, como resultado, tem a mesma responsabilidade de implementar o controle de estado alterado para o arquivo de projeto como um editor de texto faz para seus arquivos. O ambiente lida com o estado alterado da solução, mas você deve lidar com o estado alterado de qualquer objeto que a solução referencia, 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, então ele será responsável por implementar o rastreamento de estado alterado.

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

  • Rejeite a solicitação de alteração, caso em que o editor ou projeto deve permanecer no estado original (limpo).

  • Indique que os dados do documento devem ser recarregados. Para um projeto, o ambiente recarregará os dados do projeto. Um editor deve recarregar os dados do disco por meio 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 adicionar 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 que um projeto ou editor salve 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 IVsPersistDocData2 use a função auxiliar SaveDocDataToFile. Se o editor implementar IVsPersistDocData2 dessa forma, a chamada para IVsQueryEditQuerySave2::QuerySaveFile ou IVsQueryEditQuerySave2::QuerySaveFiles será feita para você.

Observação

Sempre faça essas chamadas preventivamente , ou seja, em um momento em que seu editor pode 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 chamar o método apropriado IVsTrackProjectDocuments2::OnAfter* para notificar o ambiente de que a operação está concluída. O projeto deve chamar os métodos da IVsTrackProjectDocuments2 interface para todos os arquivos (por exemplo, arquivos especiais) e não apenas os arquivos pai. Chamadas de arquivo são obrigatórias, mas chamadas de diretório são opcionais. Se o projeto tiver informações de diretório, ele deverá chamar os métodos apropriados IVsTrackProjectDocuments2 , mas se ele 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 ao abrir ou fechar o projeto. Os ouvintes que desejam essas informações na inicialização podem aguardar o evento OnAfterOpenSolution e iterar por meio da solução para localizar os dados necessários. Ao desligar, essas informações não são necessárias. IVsTrackProjectDocuments2 é fornecido a partir de SVsTrackProjectDocuments.

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