Связывание статически в C # - PullRequest
       37

Связывание статически в C #

16 голосов
/ 02 сентября 2008

Я работаю над модулем для CMS. Этот модуль распространяется как библиотека классов DLL.

У меня есть несколько служебных библиотек, которые я хотел бы использовать в этом модуле. Могу ли я в любом случае связать эти библиотеки статически, чтобы мне не приходилось распространять несколько библиотек DLL (таким образом, раздельно распределяя мои служебные библиотеки)?

Я хотел бы иметь только одну DLL.

Ответы [ 3 ]

23 голосов
/ 02 сентября 2008

Вы можете объединить множество 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-библиотеками и имеет несколько опций для управления обработкой и форматом вывода. Подробности см. В сопроводительной документации.

12 голосов
/ 28 января 2012

Если вы не хотите использовать ILMerge, см. Эту страницу:

http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

примечание редактора : Джеффри Рихтер советует поместить ваши dll в exe-файл в качестве ресурсов ( Для каждого добавляемого вами DLL-файла отобразите его свойства и измените его «Build Action» на «Embedded Resource». «). Затем необходим специальный загрузчик классов для обеспечения работы исполняемого файла ( Во время выполнения CLR не сможет найти зависимые сборки DLL, что является проблемой. Чтобы это исправить, при инициализации приложения зарегистрируйте обратный вызов метод с событием ResolveAssembly в AppDomain ).

Обязательно измените строку resourceName, чтобы она указала на ваши фактические ресурсы. (например, измените AssemblyLoadingAndReflection на название вашего проекта.)

2 голосов
/ 02 сентября 2008

Краткий ответ на этот вопрос - нет! Вы не можете ссылаться в DLL во время компиляции. Я не знаю, есть ли какой-нибудь тонкий способ сделать это, но вам, вероятно, придется распространять dll вместе с вашими cms Лучший способ сделать это - перераспределить.

...