Состояние компоновщиков для приложений .NET (иначе, пожалуйста, сэр, можно мне получить версию Linker 2009)

Многие здесь, вероятно, знакомы с одним из самых популярных сообщений в блогах Джоэла Спольски, Пожалуйста, сэр, можно мне найти компоновщик, где он просит способ удалить зависимости от .NET framework, чтобы - можно разрабатывать и продавать отдельное приложение.

Джейсон Зандер из команды разработчиков Visual Studio в то время ответил со своим мнением по теме, утверждая, что тема несколько спорная - возможность исправить Проблемы безопасности во время выполнения (среди прочего) были их главной заботой. В целом небольшие накладные расходы того стоили.

Перенесемся в 2009 год. Сейчас несколько групп утверждают, что у них есть компоновщики C #. (Джейсон Зандер даже сам сказал, что для его реализации не потребуется много времени.) Вместо симпатичной, десятки мегабайт загрузки .NET 1.0, теперь у нас есть массивный межплатформенный полный установщик .NET 3.5 объемом 200–300 МБ. который содержит версии .NET для x86, x64 и ia64. Предложения Microsoft по уменьшению размера среды выполнения включают:

  • Распакуйте распространяемый пакет, удалите целевые платформы, которые вам не нужны, и снова соберите его.
  • Используйте веб-загрузчик, который загружает только библиотеки для вашей платформы.
  • Используйте установщик профиля клиента (новый по состоянию на конец 2008 г.), который имеет ограниченные библиотеки и работает только для x86.

Что еще хуже, насколько я понимаю (поправьте меня, если я ошибаюсь), профиль клиента даже не регистрируется в Windows как установленный .NET 3.5. Это означает, что если на компьютере установлено несколько клиентских приложений .NET 3.5, ни одно из них не увидит друг друга, и среда выполнения будет повторно устанавливаться снова и снова!

Я действительно не знаю, о чем здесь думает Microsoft. Даже если предположить, что в наихудшем случае установка будет для одной целевой платформы (например, x64) и необходимо включить только эти библиотеки, вы все равно столкнетесь с накладными расходами в размере более 60 МБ на ваше приложение. Даже одно из самых известных приложений .NET, Paint.NET, было чревато Трудности с установкой приложения из-за огромных зависимостей .NET. Если ОНИ имеют проблемы с распространением бесплатного приложения, как насчет остального мира? В конце концов, им пришлось Создайте загрузчик, который установит Microsoft Installer 3.1, загрузчик среды выполнения .NET и все другие зависимые библиотеки, прежде чем они смогут установить собственное приложение.

Так как насчет этого. Компоновщик. Существуют ли какие-нибудь хорошие из них - или инструмент, который просто позволяет создавать приложение C #, не требуя от пользователя установки массивной среды выполнения .NET?

Обновление: итак, похоже, есть несколько вариантов:

Мононуклеоз:

.СЕТЬ:

Похоже, инструменты Mono находят применение; как насчет инструментов на основе .NET? Есть ли другой опыт работы с ними, или нам просто придется подождать, пока Microsoft выпустит версию 3.5 для всех? Страшно подумать, сколько времени займет выпуск .NET 4.0 ...


person Community    schedule 20.03.2009    source источник
comment
Разве в ILMerge нет такой возможности?   -  person configurator    schedule 21.03.2009
comment
Ты так прав !!! Установщик драйвера веб-камеры (сам 42M) от Microsoft пошел в Интернет и загрузил .NET 3.0 - это заняло более 10 минут на 1,5 M ADSL ... То, о чем меня просят - только для использования веб-камеры ...   -  person Dmitry Khalatov    schedule 30.03.2009
comment
Было бы не так уж плохо, если бы Microsoft не потратила так много времени на то, чтобы распространить .NET 3.5 для всех. Если бы они включили его в последние пакеты обновления, как это было с .NET 2.0, большинству людей не пришлось бы иметь дело с этой ерундой.   -  person Robert P    schedule 30.03.2009
comment
Я пробовал Рустемсофт не работает. Вот сообщение снизу Obfuscato. Не рекомендуется связывать сборки .NET framework.   -  person Nick    schedule 14.01.2010
comment
ссылка на thinstall неверна. должно быть vmware.com/products/thinapp   -  person Simon    schedule 06.10.2010
comment
В прошлый раз, когда я работал с thinstall, это был не компоновщик как таковой, а упаковщик, он просто обернул и сжал все зависимости в то, что выглядело как EXE. Очень впечатляет и хорошо работает, но не компоновщик.   -  person DarinH    schedule 22.03.2011


Ответы (8)


Случай с Mono Linker.

Я не могу много говорить о других частях программного обеспечения, перечисленных здесь, но как автор Mono Linker я могу сказать, что он делает, а что нет.

Mono Linker - это только управляемый компоновщик, поэтому по определению он принимает сборки и удаляет то, что не нужно программе для запуска. Он не объединяет сборки вместе и не делает из них родную программу.

Есть клон Mono.Merge ILMerge, но он не полный, и его автор не поддерживает его. Для создания собственной программы, содержащей как среду выполнения Mono, так и сборки, Mono предоставляет инструмент mkbundle.

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

Я написал пару сообщений в блоге о компоновщике:

О нашем опыте работы с линкером. В настоящее время компоновщик используется в двух частях проекта Mono. Он используется для создания сборки, которую мы раздаем людям для встраивания нашего компилятора C #, Mono.CSharp.dll. Вы можете посмотреть презентацию Мигеля на PDC, в которой описывается, как мы это делаем. Это довольно просто, и это базовое использование Linker, который является настраиваемым инструментом, и для него довольно легко написать собственные шаги.

Более сложное использование компоновщика - это способ для создания наших сборок Moonlight. Moonlight является нашей реализацией Silverlight, сборки являются подмножеством сборок рабочего стола. Таким образом, мы связываем наши сборки рабочего стола, чтобы уменьшить их размеры, и, используя настраиваемые шаги, трансформируем общедоступный API в соответствии с Silverlight.

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

person Community    schedule 29.03.2009
comment
компоновщик также используется для Monotouch, чтобы обойти тот факт, что Apple не разрешает установку (байт-кода) интерпретаторов и виртуальных машин на iphone - person Matthew Lock; 10.11.2009
comment
Мэтью: ну не совсем. Компоновщик используется в MonoTouch для уменьшения размера конечного приложения. Это компилятор AOT, который обходит ограничение JIT - person Jb Evain; 10.11.2009

FWIW

У Mono уже довольно давно есть компоновщик.

Вот пример о том, как использовать mkbundle.

person Sam Saffron    schedule 20.03.2009
comment
Каким бы хорошим ни был компоновщик :), он не решает конкретной проблемы здесь. Компоновщик Mono является управляемым и работает только с управляемыми сборками. - person Jb Evain; 21.03.2009
comment
sambo99, у вас был опыт работы с ним? - person Robert P; 28.03.2009

http://www.xenocode.com/

Это то, что мы используем. Пока, после года или несколько ограниченного использования (возможно, 500 установок в дикой природе), никаких проблем.

И это по довольно разумной цене. У них есть более дорогое программное обеспечение для полной виртуализации (которое связывает ваше приложение с другими приложениями и даже с операционным ПО). Но нам все это было не нужно. Примерно год назад наша цена составляла 400 долларов. Думаю, сейчас это немного дороже, но намного меньше, чем у Thinstall.

И у них есть отличные демонстрации, которые вы можете скачать, например IE 8 . Установка не требуется.

person Community    schedule 30.03.2009

Профиль клиента регистрируется в Windows, но особым образом, поскольку вы не хотите путать машину, имеющую только профиль клиента, с машиной с полным .net 3.5.

Профиль клиента:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\DotNetClient\v3.5\Install 

Полный .net 3.5:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\Install
person Community    schedule 29.03.2009

Это основная проблема, о которой я слышал много лет назад на .NET Rocks. У меня никогда не было возможности попробовать это, хотя

http://www.remotesoft.com/linker/

person Jacob Adams    schedule 20.03.2009
comment
Ссылка действительна. Стоимость 1249 долларов. Я предполагаю, что это налог .net. Рад, что мы перешли на веб-сайт. - person Clay Nichols; 09.10.2013

Никогда не использовал его, но слышал, что вы можете делать то же самое с .NET Reactor.

person Lurker Indeed    schedule 25.03.2009

Я спорил (под своим псевдонимом "Мистер Аналогия") на форуме Джоэла какое-то время нужен компоновщик, прежде чем он напишет эту статью. Распространение линкеров, похоже, оправдало мою озабоченность (к сожалению).

http://www.thinstall.com/

От людей, с которыми я разговаривал, он довольно хорошо оценивается, хотя в последний раз, когда я проверял, лицензирование было обременительным (2 тысячи долларов в год за лицензию приложения). Похоже, они нацелены на ИТ-магазины, а не на разработчиков ПО. Тот факт, что вы не можете найти цены на их сайте, предполагает (для меня), что это дорого.

person Community    schedule 30.03.2009

На CodeProject есть отличная статья, в которой рассказывается о некоторых «компоновщиках» и о том, как они работают.

http://www.codeproject.com/KB/dotnet/internals_native.aspx

person Community    schedule 29.03.2009