Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Если вы не хотите использовать 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, что является проблемой. Чтобы исправить это, когда ваше приложение инициализируется, зарегистрируйте метод обратного вызова с помощью AppDomains ResolveAssembly событие).

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

Ответ 3

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