Hoje, qual é a maneira correta de trabalhar com objetos COM?

Essa é uma pergunta muito comum e eu decidi perguntar, porque essa pergunta pode ter uma resposta diferente a partir de hoje. Felizmente, as respostas ajudarão a entender qual é a maneira correta de trabalhar com objetos COM. Pessoalmente, sinto-me muito confuso depois de obter opiniões diferentes sobre esse assunto.

Nos últimos 5 anos, eu costumava trabalhar com objetos COM e as regras eram muito claras para mim:

Use um único período nas linhas de código. O uso de mais de um período cria objetos temporários nos bastidores que não podem ser explicitamente liberados.Não use foreach, use um loop for e libere cada item em cada iteraçãoNão chame FInalReleaseComObject, use ReleaseComObject.Não use o GC para liberar objetos COM. A intenção do GC é principalmente para uso de depuração.Solte os objetos na ordem inversa de sua criação.

Alguns de vocês podem ficar frustrados depois de ler essas últimas linhas, é o que eu sabia sobre como criar / liberar corretamente o Objeto Com. Espero obter respostas que o tornem mais claro e incontestado.

A seguir, alguns links que encontrei sobre esse tópico. Alguns deles informam que é necessário chamar ReleaseComObject e outros não.

Como liberar corretamente objetos COM do Excel (Novembro de 2013)Maneira correta de liberar objetos COM no .NET (Agosto de 2011)Marshal.ReleaseComObject Considered Dangerous (Março de 2010)ReleaseCOMObject (Abril de 2004)

"... Nos cenários do VSTO, você normalmente não precisa usar o ReleaseCOMObject. ..."

MSDN -Método Marshal.ReleaseComObject (versão atual do .NET Framework):

"... Você deve usar esse método para liberar o objeto COM subjacente que contém referências ..."

ATUALIZAR:

Esta questão foi marcada como muito ampla. Conforme solicitado, tentarei simplificar e fazer perguntas mais simples.

O ReleaseComObject é necessário ao trabalhar com objetos COM ou ao chamar o GC da maneira correta?A abordagem VSTO muda a maneira como costumávamos trabalhar com objetos COM?Quais das regras acima que eu escrevi são necessárias e quais estão erradas? Existe algum outro?

questionAnswers(1)

yourAnswerToTheQuestion