Связывание статически в C #
-
09-06-2019 - |
Вопрос
Я работаю над модулем для CMS. Этот модуль распространяется как библиотека классов DLL.
У меня есть несколько служебных библиотек, которые я хотел бы использовать в этом модуле. В любом случае я могу статически связать эти библиотеки, чтобы мне не приходилось распространять несколько библиотек DLL (таким образом, раздельно распределяя мои служебные библиотеки)?
Я хотел бы иметь только одну DLL.
Решение
Вы можете объединить множество библиотек DLL с ILMERGE:
http://research.microsoft.com/~mbarnett/ILMerge.aspx р>
Сам не пробовал. Надеюсь, это поможет.
<Ч> Скачать здесь:
http://www.microsoft.com /downloads/details.aspx?familyid=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en р>
Краткое описание (со страницы загрузки)
ILMerge - это утилита для объединения нескольких сборок .NET в одну сборку .NET. Он работает как с исполняемыми файлами, так и с DLL-библиотеками и имеет несколько опций для управления обработкой и форматом вывода. Подробности смотрите в сопроводительной документации.
Другие советы
Если вы не хотите использовать ILMerge, см. эту страницу:
примечание редактора : Джеффри Рихтер советует помещать ваши dll в exe-файл в качестве ресурсов ( Для каждого добавляемого вами DLL-файла отобразите его свойства и измените его & # 8220; Build Action & # 8221 ; to & # 8220; Embedded Resource. & # 8221; ). Затем необходим специальный загрузчик классов, чтобы заставить исполняемый файл работать ( Во время выполнения CLR не сможет найти зависимые сборки DLL, что является проблемой. Чтобы исправить это, при инициализации приложения зарегистрируйте метод обратного вызова с событием ResDoveAssembly в AppDomain ).
Обязательно измените строку resourceName
, чтобы она указала на ваши фактические ресурсы. (например, замените AssemblyLoadingAndReflection
на имя вашего проекта.)
Краткий ответ на этот вопрос - нет! Вы не можете ссылаться в DLL во время компиляции. Я не знаю, есть ли какой-нибудь тонкий способ сделать это, но вам, вероятно, придется распространять dll вместе с вашими cms. Лучший способ сделать это - это сделать какой-нибудь распространяемый.