Объекты расширения Visual Studio реализованы в COM. Одно из жестких правил COM заключается в том, что интерфейсы являются неизменяемыми. Изменение интерфейса требует переназначения IID интерфейса. Гид, который идентифицирует интерфейс. Это причиняет много боли любому, кто использует интерфейс. Им придется изменить свой код и перекомпилировать его.
Это требование неизменности существует, потому что под капотом интерфейсы COM реализованы в виде таблицы адресов методов. Бедствие возникает, когда существует несоответствие между тем, как клиентский код предполагает, что таблица выглядит, и фактической таблицей, реализованной сервером. Или другими словами, когда интерфейсы не являются двоично-совместимыми. Это приводит к очень трудно диагностируемым ошибкам во время выполнения, которые срабатывают, когда клиентский код вызывает неправильный метод или использует слот таблицы, у которого вообще нет связанного метода. Это печально известная проблема COM DLL Hell. Изменение IID решает это, клиентский код просто не сможет найти старую реализацию. Все еще неприятная ошибка, но, по крайней мере, ее легко диагностировать.
Заполнители позволяют Microsoft добавлять новые методы в интерфейс, но не нарушают макет таблицы. И, следовательно, не нужно будет переименовывать интерфейс и переназначать интерфейс IID. И, следовательно, не заставит производителей надстройки перекомпилировать свои надстройки. Если новый плагин не попытается использовать старую реализацию интерфейса, это все равно не будет работать. Но с шансами на достойное сообщение об исключении вместо неприятного AccessViolation.