Excel не выходит, потому что Ваше приложение все еще содержит ссылки на COM-объекты.
я предполагаю, что Вы вызываете по крайней мере одного члена COM-объекта, не присваивая его переменной.
Для меня это было excelApp. Рабочие листы объект, который я непосредственно использовал, не присваивая его переменной:
Worksheet sheet = excelApp.Worksheets.Open(...);
...
Marshal.ReleaseComObject(sheet);
я не знал, что внутренне C# создал обертку для эти Рабочие листы COM-объект, который не стал выпущенным моим кодом (потому что я не знал о нем), и была причина, почему Excel не был разгружен.
я нашел решение своей проблемы на эта страница , которая также имеет хорошее правило для использования COM-объектов в C#:
Никогда использование две точки с COM-объектами.
Так с этим знанием правильный способ сделать вышеупомянутое:
Worksheets sheets = excelApp.Worksheets; // <-- The important part
Worksheet sheet = sheets.Open(...);
...
Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(sheet);
ОБНОВЛЕНИЕ ПОСЛЕ СМЕРТИ:
я хочу, чтобы каждый читатель прочитал этот ответ Hans Passant очень тщательно, поскольку он объясняет прерывание I, и много других разработчиков споткнулось в. Когда я записал этот ответ несколько лет назад, я не знал об эффекте, который отладчик имеет к сборщику "мусора" и сделал неправильные выводы. Я сохраняю свой ответ неизменным ради истории, но прочитайте эту ссылку, и не делают , идут путем "двух точек": сборка "мусора" Понимания в.NET и Очищают Excel Interop Objects with IDisposable
Кажется, что Вы могли бы пропускать пакет шрифта. Например, в минимальном человечностью, у меня нет дополнительных пакетов, таким образом, терминальный шрифт перекрывает друг друга. Я использовал sudo apt-get install ttf-ancient-fonts
, и это добилось цели для терминала. Это может также работать на Firefox, в противном случае попробовать другие семейства шрифтов. Эти пакеты шрифта могут быть найдены здесь
Hope, которой это помогает.