См. это сообщение в блоге для расширения первой проблемы. Дело в том, что если вы не укажете ClassInterfaceType.None
, будет сгенерирован дополнительный интерфейс, и это может вызвать проблемы с двоичной совместимостью, если вы измените порядок методов, измените их сигнатуры или удалите некоторые из них. Гораздо лучшей альтернативой является явное определение интерфейса и наследование от него вашего класса с указанием ClassInterfaceType.None
.
ComVisible(true)
не обязательно для видимости COM. По умолчанию все открытые методы открытых классов и все открытые классы видимы COM, все остальные объекты не видны COM. Если вам нужно изменить это, вы используете атрибут ComVisible, обычно для уменьшения количества видимых COM-классов, так как для каждого видимого COM-класса создаются записи реестра и записи библиотеки типов, что вызывает ненужное загрязнение реестра и раздувает библиотеку типов. ИМО - это хорошая идея явно пометить все публичные объекты ComVisible.