Есть COM написанный на .NET. Например: Library.dll. Нужно создать PIA (primary interop assembly), например Library.Interop.dll
Для чего: чтобы протестировать написанный COM из другого .NET приложения, как если COM вызывали из приложений, написанных в Delphi, C++ и т.д., но с использованием "раннего связывания" (early-binding), а не "позднего связывания" (late-binding) с использованием "InvokeMember"
Сложности:
1. Если добавлять сборку напрямую в зависимость .NET приложения, то по ощущениям маршаллер не используется. Вызовы выполняются как .NET <-> .NET. А нужно проверить именно маршаллер
2. Можно в тестируемом приложении написать свои интерфейсы с использованием ComImport, но это копипаст, а хотелось бы автоматизации.
Вопрос: кто решал подобную задачу, поделитесь опытом. Как выполнялось распространение написанных COM .NET сторонним разработчикам?
Получится ошибка: "Tlbimp: Error TI1002: The input file in not valid type library". Tlimp на вход нужна библиотека типов (*.tlb), а не сборка .NET. А если же на вход подать "*.tlb", созданную Regasm-ом, то будет другая ошибка: Error TI1029: Type library cannot be re-imported. И это тоже понятно, ведь исходная сборка, это .NET, а по логике tlbimp, если написали на .NET то подключаете напрямую, не создавайте PIA.
В итоге: танцы с tlbimp не будут работать. Пока решениями остаются только п.1 и п.2 из моего сообщения.