Pergunta

Eu tenho um designer que depende da existência de outros itens de solução. Se um desses itens for excluído, o designer trava e você terá que editar como XML para corrigir. Não é exatamente amigável.

No entanto, eu tenho o objeto DTE que representa a instância do Visual Studio, bem como o ProjectEMs de que depende.

É possível, em algum lugar nas profundezas do DTE, registrar um ouvinte para a exclusão desse projeto? E, se sim, como eu faria isso?

Foi útil?

Solução

Parece que o culpado aqui é a coleção de lixo. Encontrei os dois conjuntos de eventos a seguir se comportaram de forma idêntica.

Events2 events2 = dte.Events as Events2;
if (events2 != null)
{
    this.projectItemsEvents = events2.ProjectItemsEvents;
    this.projectItemsEvents.ItemAdded += this.ProjectItemsEvents_ItemAdded;
    this.projectItemsEvents.ItemRemoved += this.ProjectItemsEvents_ItemRemoved;
    this.projectItemsEvents.ItemRenamed += this.ProjectItemsEvents_ItemRenamed;
}

this.csharpProjectItemsEvents =
    dte.Events.GetObject("CSharpProjectItemsEvents") as ProjectItemsEvents;
if (this.csharpProjectItemsEvents != null)
{
    this.csharpProjectItemsEvents.ItemAdded += this.CSharpProjectItemsEvents_ItemAdded;
    this.csharpProjectItemsEvents.ItemRemoved += this.CSharpProjectItemsEvents_ItemRemoved;
    this.csharpProjectItemsEvents.ItemRenamed += this.CSharpProjectItemsEvents_ItemRenamed;
}

A chave para ambos era garantir uma referência ao objeto de eventos no assinante. Depois que eu adicionei a referência, eles se comportaram como eu esperava.

private ProjectItemsEvents projectItemsEvents;
private ProjectItemsEvents csharpProjectItemsEvents;

Outras dicas

Verificação de saída Este artigo de FAQ O que explica como se registrar para eventos do ProjectItems (incluindo o itemDeleted).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top