Detalhes de configuração de controle de origem
Para implementar o controle de origem, você precisará configurar corretamente o sistema do projeto ou o 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 editor ou projeto deve solicitar permissão para fazer a transição para o estado alterado de (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 M:Microsoft.VisualStudio.Shell.Interop.IVsPersistDocData.IsDocDataDirty(System.Int32@). Um projeto é essencialmente um editor para um arquivo de projeto e tem como resultado, o mesmo responsável pela implementação de controle de estado alterado para o arquivo de projeto como um editor de texto faz para seus arquivos. O ambiente trata o estado alterado da solução, mas você deve manipular o estado alterado de qualquer objeto, a solução faz referência, mas não armazena, como um arquivo de projeto ou de seus itens. Em geral, se o projeto ou o editor é responsável por gerenciar a persistência de um item, em seguida, é responsável pela implementação do controle de estado alterado.
Em resposta para o IVsQueryEditQuerySave2::QueryEditFiles chamar, o ambiente pode fazer o seguinte:
Rejeitar a chamada para alterar, caso em que o editor ou projeto deve permanecer no estado inalterado (limpo).
Indica 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 por meio de sua ReloadDocData implementação. Em ambos os casos, o contexto no projeto ou no editor pode alterar quando os dados são recarregados.
É uma tarefa complexa e difícil de fazer ajustes apropriados IVsQueryEditQuerySave2::QueryEditFiles chamadas em 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 editor ou projeto salva um arquivo, ele deve chamar QuerySaveFile ou QuerySaveFiles. Para arquivos de projeto, essas chamadas são automaticamente preenchidas pela solução, que sabe quando salvar um arquivo de projeto. Editores são responsáveis por fazer essas chamadas, a menos que a implementação do editor de IVsPersistDocData2 usa a função auxiliar SaveDocDataToFile. Se o seu editor implementa IVsPersistDocData2 dessa forma, a chamada para IVsQueryEditQuerySave2::QuerySaveFile ou IVsQueryEditQuerySave2::QuerySaveFiles é feita para você.
Dica
Sempre fazer essas chamadas Entercept — ou seja, ao mesmo tempo quando seu editor é capaz de receber um cancelamento.
Solicitar permissão para adicionar, remover ou renomear arquivos no projeto
Antes de um projeto pode adicionar, renomear ou remover um arquivo ou diretório, ele deve chamar o apropriado IVsTrackProjectDocuments2::OnQuery* método para solicitar permissão do ambiente. Se a permissão é concedida, o projeto deve concluir a operação e, em seguida, chame o apropriado IVsTrackProjectDocuments2::OnAfter* método para notificar o ambiente para que a operação foi 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 do pai. Chamadas de arquivo são obrigatórias, mas as chamadas de diretório são opcionais. Se o seu projeto possui informações de diretório, então ele deve chamar o apropriado IVsTrackProjectDocuments2 métodos, mas se ele não tiver essas informações, o ambiente deduzirá informações de diretório.
O projeto não deve chamar os métodos de IVsTrackProjectDocuments2 no projeto, abrir ou fechar. Ouvintes que quiser que essas informações na inicialização podem aguardar a OnAfterOpenSolution eventos e iterar por meio da solução para localizar as informações necessárias. Ao desligar, essas informações não é necessária. IVsTrackProjectDocuments2é fornecido pela SVsTrackProjectDocuments.
Para cada adicionar, renomear e remover ação, há um OnQuery* método e um OnAfter* método. Chamar o OnQuery* método pedir permissão para adicionar, renomear ou remover o arquivo ou diretório. Chamar o OnAfter* método depois que o arquivo ou diretório foi adicionado, renomeado ou removido e o estado do projeto reflete o novo estado.