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

StackOverflow https://stackoverflow.com/questions/45702

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

RemoteSoft Саламандра

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

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

Microsoft объявила о своем Собственная предварительная версия .NET это позволит запускать приложения .NET без установки фреймворка.

Взглянем: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

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

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

Шаги:

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

  2. Откройте командную строку и cd в каталог вашего приложения.

  3. Введите это:

    dotnet compile --native
    

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

Native compiled .NET Core EXE

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


Альтернативно, если вам нужна еще более быстрая программа, вы можете запустить это:

dotnet compile --native --cpp

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

Дополнительную информацию об этом можно найти в интерфейсе командной строки dotnet. Репозиторий GitHub.

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

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

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

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

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

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

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

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

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

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

Это не решает вашу проблему, на самом деле.

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

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

2019 Ответ:Использовать дотнет/корерт.Он может компилировать проекты .NET Core в автономные .exe файлы.Никаких зависимостей (за исключением системных библиотек, таких как kernel32.dll).Могу поспорить, что это именно то, что нужно ОП.

На домашней странице GitHub:

Компилятор CoreRT может скомпилировать управляемое приложение .NET Core в собственный (зависящий от архитектуры) однофайловый исполняемый файл, который легко развернуть.Он также может создавать автономные динамические или статические библиотеки, которые могут использоваться приложениями, написанными на других языках программирования.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top