Статическая компиляция в мире .NET - PullRequest
17 голосов
/ 23 марта 2009

Я напишу небольшое настольное приложение для клиента с компьютерами WinXP, и они не будут устанавливать .NET Framework (по крайней мере, не для меня).

Так что мой выбор ограничен C ++ или VB6, ни один из которых не звучит великолепно. Я помню, как читал в тот день, когда Mono разработал статический компилятор, но в последнее время единственное, что я смог найти, - это запись Мигеля де Иказы о статической компиляции для игрового движка с целью запуска приложения на iPhone - не то, что я имел в виду.

Существуют ли какие-либо продукты, бесплатные или коммерческие, которые позволят мне статически скомпилировать мое WinNET-приложение .net 3.5?

Спасибо

Ответы [ 2 ]

11 голосов
/ 23 марта 2009

Вы можете попробовать использовать Remotesoft Salamander.

Это именно то, что вы хотите.

8 голосов
/ 26 февраля 2010

Mono значительно улучшил свою поддержку Ahead of Time compilation (AOT) до такой степени, что, предполагая, что вы готовы / способны ориентироваться на Mono, а не на среду выполнения .Net, должна быть возможность статической компиляции практически любого приложения CIL.

Является ли это хорошей идеей в целом, полностью зависит от приложения и ваших ограничений.

Например, Novell теперь поставляет MonoTouch, реализацию CLI, которая полностью скомпилирована и подключена к AOT, чтобы позволить приложениям .Net (а не только играм) работать на iPhone против инфраструктуры CocoaTouch.

Те же самые методы AOT могут использоваться для компиляции приложения Winforms, для которого в качестве предварительных условий не требуется среда выполнения .Net или Mono. Есть много компромиссов в производительности (как положительных, так и отрицательных), связанных с AOT, поэтому я бы не стал двигаться вперед без должной осмотрительности.


Edit:

В ответ на вопрос Джона Сондерса относительно «почему бы просто не установить его для них?». Это фактически вызывает одну причину, по которой вам может понадобиться компиляция AOT .. Bootstrappers.

Чтобы установить что-либо, вы должны запустить исполняемый файл. Вы можете распространять MSI (который запускает msiexec.exe неявно) или вы можете распространять исполняемый файл. MSI, хотя и функционален, - довольно ужасный опыт для разработчиков. Таким образом, вы можете создать загрузчик с помощью .NET (скомпилированный AOT исключает зависимость во время выполнения), который устанавливает все необходимые предварительные условия (например, .NET) перед установкой приложения.

Кроме того, некоторым компаниям может потребоваться поставка загружаемых исполняемых файлов, которые не требуют, чтобы пользователи что-либо устанавливали (в автоматическом режиме или иным образом).

Еще одно: для установки .NET требуются права администратора. AOT может позволить вам обойти это требование для вашего приложения.

Опять же, является ли что-то из этого хорошей идеей, полностью зависит от приложения и ваших ограничений.

...