Статическая ссылка COM DLL в C# (избегайте regfree)

У меня, возможно, глупый вопрос:

У нас есть COM DLL VC++ (разработанная для внутреннего использования), и мы перенесли наше основное приложение на C# и использовали COM Interop, reg-free для доступа к COM dll. Все отлично работает с внутренним встроенным манифестом.

Тем не менее, дружественный продукт-dev/marketing/sales хочет минимизировать пакет и напрямую включать COM-dll. Каким-то образом кто-то убедился, что в дистрибутив приложения должен входить только exe-файл (так как он неуправляемый, мы не можем просто включить ILMerge).

Поскольку у нас есть tlb/lib COM, можем ли мы каким-то образом статически связать его, не перенося весь COM на C# управляемую переработку?

Спасибо

PS Прошу прощения за мою формулировку: компания сократилась, и я парень из Python, которому пришлось изучать все.NET за последнюю неделю или около того, так как теперь я делаю свою работу и работу двух бывших разработчиков.net.

2 ответа

Решение

Можно включить исходный код для COM DLL в проект для exe, или вы можете изменить проект COM DLL в статический проект lib. Как только вы это сделали, вы должны изменить код для непосредственного создания COM-объектов. Все сказано, ни один из вариантов не особенно прост.

В качестве альтернативы вы можете посмотреть на такие продукты, как Spoon Studio, которые позволят вам обернуть ваш exe и COM DLL в один exe без какого-либо кода.

Похоже, что Костура может более или менее сделать это. https://github.com/Fody/Costura

В частности, он поддерживает объединение неуправляемых сборок (например, DLL C++) в сборку.NET.

Обратите внимание - это не настоящая статическая компоновка, но она позволит достичь цели упаковки всего в один EXE-файл, который будет распространяться.

Другие вопросы по тегам