Я не знаю специфику взаимодействия Office COM, но вот код, предложенный в статье MSDN . Это предполагает, что двойной сбор / ожидание и очистка указателей помогают при очистке оболочки RCW.
item = null;
app.Quit();
app = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
Этот URL, однако, также предлагает
while (Marshal.ReleaseComObject(app) > 0) { }
, против которого я лично настоятельно рекомендую, если вы можете помочь, поскольку вы в основном только что уничтожили этот RCW для своего домена приложений (как указано в статье).
[Редактировать: Кроме того, сборщик мусора .Net ведет себя очень по-разному, когда внутри отладчика против кода выпуска, поэтому очень важно проверить это вне отладчика]