Ну, вот как проблема была решена.
.NET, похоже, загружает TLB для построения новой квартиры для каждого потока ASP.NET (все происходит, когда новый поток впервые пытается получить доступ к какому-либо COM-интерфейсу).Кажется, для этой цели используются функции CoMarshalInterThreadInterfaceInStream и CoGetInterfaceAndReleaseStream.Я не могу доказать это, но вызов этих функций вызывает тот же эффект: запрос системного реестра и загрузка TLB самой высокой совместимой версии (та же основная версия, самая высокая младшая версия).На поведение CoGetInterfaceAndReleaseStream манифест не влияет.
Таким образом, реальная проблема заключается в том, что наш проект не следует правилам, которые Microsoft рекомендует для нумерации версий: COM-интерфейсы, имеющие одну и ту же основную версию, должны быть совместимы.получить адрес функции LoadTypeLib (OleAut32.dll) и установить инструкцию JMP в ее начале.JMP переходит к нашей реализации, которая проверяет имя загружаемого TLB и, если это один из известных TLB, перенаправляет чтение в локальный каталог.