2009-07-29 4 views
3

Я создаю приложение библиотеки классов, которое содержит некоторые ссылочные DLL, такие как Skype4COM, который, очевидно, не является родным объектом, поэтому я просто хочу узнать, как встраивать эту dll в мою dll, появившись после создания решения ,Вставить одну DLL в другую DLL В C#

Я просто не хочу видеть людей, которые я использовал при разработке этого приложения, а также я не хочу, чтобы они боролись с skype4com.dll, чтобы импортировать его в свои проекты.

P.s: использовать skype4com.dll, он должен быть зарегистрирован на окнах с помощью CMD окно: regsvr32.exe DLLPath

Так это вызовет ошибку или есть работа вокруг чего-то.

Заранее спасибо.

С уважением.

ответ

4

Попытка скрыть ваши зависимости - это плохая причина для этого, ИМО. Помимо всего прочего, если вы не запутываете код, он все равно будет виден всем, кто декомпилирует его с помощью такого инструмента, как Reflector.

Попытка упростить развертывание является хорошей причиной. Плохая новость заключается в том, что для COM-объектов в .NET 3.5, насколько мне известно, нет простой и простой установки.

Отличная новость заключается в том, что в C# 4.0 и .NET 4.0 существует альтернативный подход, который упрощает развертывание библиотек с использованием COM. Вы можете указать ссылку PIA вместо ссылки на нее, что делает компилятор встроенным в вашу сборку достаточно информации, чтобы получить реальную библиотеку COM и типы/члены, которые вы используете. Вам тогда не нужно отправлять или устанавливать PIA.

Если вы можете подождать .NET 4.0, это подход, который я возьму для COM PIA, но для чего-либо еще я просто отправлю библиотеку отдельно. Помимо всего прочего, разработчики, использующие вашу библиотеку, могут уже использовать те же библиотеки классов, на которые вы зависите: введение двух отдельных копий будет очень запутанным. Если вы не можете дождаться .NET 4.0 (или не хотите, чтобы ваши пользователи разворачивали его), то я боюсь, что вам придется установить COM PIA в обычном режиме.

0

Вы не можете внедрить COM-сервер in-proc (DLL, который должен быть зарегистрирован в regsvr32) в сборку библиотеки классов, без того, что COM-сервер становится функциональным.

Регистрация с помощью regsvr32 предоставляет классы COM, реализованные на COM-сервере, в реестр. Позже потребители этого сервера будут искать реестр, чтобы найти, где находится сервер COM, и попытаться загрузить его и вызвать функцию DllGetClassObject(). Если им это не удастся, они не смогут использовать COM-сервер. Я уверен, что вы не сможете внедрить и сохранить функционирование этого механизма.

0

Эта ссылка может помочь ... IL Merge

Однако ILMerge не будет работать для неуправляемых типов.

+0

Обратите внимание, что это не для неуправляемых сборок – jeroenh

1

Как я могу ответить here, вы, вероятно, можете использовать пакет Fody.Costura nuget, который включает в себя опции для неуправляемых сборок.

Смежные вопросы