Многие люди здесь, вероятно, знакомы с одним из Joel Spolsky самых популярных сообщений в блогах, Пожалуйста, сэр, могу ли я иметь компоновщик, где он кричит о способе удаления зависимостей от платформы .NET, поэтому можно разрабатывать и продавать автономное приложение.
Джейсон Зандер команды разработчиков Visual Studio, в то время ответил со своими взглядами на эту тему, утверждая, что эта тема несколько спорная - их основная проблема связана с возможностью исправлять проблемы безопасности во время выполнения (в том числе в других местах). В целом, небольшие накладные расходы стоили того.
Ускорьтесь до 2009 года. Там есть несколько групп, которые утверждают, что имеют С# -ликеров. (Джейсон Зандер даже сказал себе, что для реализации этого не потребуется много.) Вместо милой, дюжины мега-загрузки .NET 1.0, теперь у нас есть массивный кросс-платформенный комплект для установки .NET 3.5 200 МБ который содержит версии .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 и все другие зависимые libraires, прежде чем они смогут установить собственное приложение.
Итак, как насчет этого. Линкер. Существуют ли какие-либо хорошие - или инструмент, который просто позволяет создать приложение С#, не требуя, чтобы пользователь установил массовое время выполнения .NET?
Обновление: так, похоже, есть несколько вариантов:
Mono:
- Моно имеет свой собственный компоновщик. Из приведенного ниже ответа, похоже, что он работает очень хорошо.
.NET:
- Xenocode кажется доступным и работает.
- Thinstall - это еще один вариант, рекомендованный VMware.
- Еще один компоновщик Remotesoft. Они оценивают это как "обфускатор". Есть ли какие-нибудь мысли?
- Найден другой Rustemsoft под названием Skater.NET Obfuscator. Кто-нибудь знаком с ними?
- Также был предложен ILmerge от Microsoft; похоже, что он выполняет только часть задачи (т.е. слияние библиотек, а не удаление неиспользуемых битов).
Похоже, что инструменты Mono используются; как насчет инструментов на базе .NET? Любой другой опыт с ними, или нам просто придется ждать, пока Microsoft вытащит его 3.5 для всех? Я содрогаюсь, чтобы подумать, сколько времени потребуется для .NET 4.0...