Как скомпилировать приложение .NET в собственный код?

Если я хочу запустить приложение .NET на компьютере, где платформа .NET недоступна; Есть ли способ скомпилировать приложение для собственного кода?

Ответ 1

В Microsoft есть статья, описывающая, как вы можете Скомпилировать MSIL для собственного кода

Вы можете использовать Ngen.

Генератор собственных изображений (Ngen.exe) является инструментом, который улучшает производительность управляемых приложений. Ngen.exe создает собственные изображения, которые файлы, содержащие скомпилированные процессорный код машины и устанавливает их в исходное изображение кэш на локальном компьютере. среда выполнения может использовать собственные изображения из кеш вместо использования точно в срок (JIT) для компиляции оригинала сборка.

К сожалению, для запуска вашей программы все еще нужны библиотеки из фреймворка. Нет никакой функции, которую я знаю с SDK MS.Net framework, который позволяет вам скомпилировать все необходимые файлы в один исполняемый файл

Ответ 2

RemoteSoft создает инструмент, который компилирует приложение .NET в пакет, который может быть запущен без установленной .NET. У меня нет опыта:

RemoteSoft Salamander

Ответ 3

Я тестировал несколько из них, и на данный момент единственное, что поддерживает .NET 3.5, а также имеет отличный стек виртуализации Xenocode Postbuild

С ngen вам все равно нужно установить платформу .NET, но с помощью инструмента как такового весь ваш управляемый код скомпилирован в собственный код, чтобы вы могли развернуть его на машинах без присутствия фреймворка.

Ответ 4

Microsoft анонсировала свой .NET Native Preview, который позволит запускать приложения .NET без установки фреймворка.

Посмотрите: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

FAQ: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

Вы можете скачать Microsoft.NET Native для VS2013 отсюда: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Ответ 5

Да, используя Ngen, Генератор собственных изображений. Однако есть ряд вещей, о которых вам нужно знать:

  • Для запуска исполняемого файла все еще требуется CLR.
  • CLR не будет динамически оптимизировать ваши сборки на основе среды, в которой он работает (например, 486 против 586 против 686 и т.д.).

В целом, только нужно использовать Ngen, если вам нужно уменьшить время запуска вашего приложения.

Ответ 6

Вы можете! Однако вы ограничены .NET 1.1 (для вас нет дженериков): Компиляция Mono Ahead-Of-Time (AOT)

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

Он был изначально разработан, потому что нет .NET или Mono для iPhone, так что они сделали MonoTouch.

Ответ 7

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

Шаги:

  • Установите инструмент dotnet CLI (интерфейс командной строки), который является частью новой ключевой привязки .NET Core. Мы будем использовать это, чтобы скомпилировать наше приложение; вы можете найти хорошую статью об этом здесь.

  • Откройте приглашение оболочки и cd в каталог вашего приложения.

  • Введите это:

    dotnet compile --native
    

Что это! Когда вы закончите, ваше приложение будет скомпилировано до одного двоичного файла, например:

Native compiled .NET Core EXE

Это будет автономный исполняемый файл; нет PDB, сборок или конфигурационных файлов (hooray!).


В качестве альтернативы, если вы хотите еще более быструю программу, вы можете запустить это:

dotnet compile --native --cpp

Это оптимизирует вашу программу, используя генератор кода С++ (в отличие от RyuJIT), поэтому ваше приложение еще более оптимизировано для сценариев AOT.

Дополнительную информацию об этом можно найти в dotnet CLI GitHub repo.

Ответ 8

Вы можете сделать это, используя новую технологию предварительной компиляции под названием .NET Native. Посмотрите здесь: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

В настоящее время он доступен только для приложений Windows Store. Он выполняет однокомпонентное связывание. Таким образом, библиотеки .NET Framework статически связаны с вашим приложением. Все скомпилировано для сборки native и IL, которые больше не используются. Приложения не запускаются в среде CLR, а оптимизированная среда выполнения, оптимизированная под управлением Managed Runtime (Mrt.dll)

Как указано выше, NGEN использовала модель компиляции микса и полагалась на IL и JIT для динамических сценариев..NET Native не использует JIT, но поддерживает различные динамические сценарии. Авторы кода должны использовать Runtime Directives, чтобы дать подсказки компилятору .NET Native в динамических сценариях, которые они хотят поддерживать.

Ответ 9

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

Это не решит вашу проблему.

Ответ 10

Характер .NET - это возможность устанавливать приложения, которые были скомпилированы в MSIL, либо с помощью JIT или Ngen, MSIL скомпилирован в собственный код и хранится локально в кеше. Это никогда не предназначалось для создания подлинного родного .exe, который можно запускать независимо от платформы .NET.

Возможно, там какой-то хак, который делает это, но мне это не кажется безопасным. Слишком много динамики, требующей такой структуры, как: динамическая загрузка сборки, генерация кода MSIL и т.д.

Ответ 11

Я думаю, это невозможно. Вам также нужно будет распространять .NET FW. Если вы хотите скомпилировать .NET-приложение для собственного кода, используйте NGen инструмент

Ответ 12

Начиная с 2012 года, теперь вы можете использовать "переносимую библиотеку классов", интегрированную в VS 2012.