Partilhar via


Detalhes de 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 pela implementação do controle de estado alterado para o arquivo de projeto que um editor de texto faz para seus arquivos. O ambiente lida com 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 é responsável pela gestão da persistência de um item, então é responsável por implementar o rastreamento de alterações de estado.

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

  • Rejeite a chamada de alteração, caso em que o editor ou projeto deve permanecer no seu estado original (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 mudar quando os dados são recarregados.

    É uma tarefa complexa e difícil adaptar as 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 utilize a função auxiliar IVsPersistDocData2SaveDocDataToFile. Se o seu editor implementa IVsPersistDocData2 desta forma, então a chamada para IVsQueryEditQuerySave2::QuerySaveFile ou IVsQueryEditQuerySave2::QuerySaveFiles é feita para si.

Observação

Sempre faça essas chamadas preventivamente, ou seja, em um momento em que seu editor possa 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 deve 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 na abertura ou fechamento do projeto. Os ouvintes que desejam essas informações na inicialização podem esperar pelo evento OnAfterOpenSolution e iterar através da solução para encontrar as informações de que precisam. Durante o encerramento, estas 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 OnQuery* método e um OnAfter* método. Chame o OnQuery* método para pedir permissão para adicionar, renomear ou remover o arquivo ou diretório. Chame o método OnAfter* depois de o ficheiro ou diretório ter sido adicionado, renomeado ou removido, e após o estado do projeto refletir o novo estado.