Как обеспечить запуск .Net exe-файлов из командной строки в linux?

Рейтинг: 1Ответов: 1Опубликовано: 24.03.2015

Как обеспечить запуск .Net-овских exe-файлов из командной строки, без необходимости вставки вызова mono перед файлом?

На сайте mono описан один из способов, с загрузкой модуля binfmt.

В gentoo wiki - как выполнять команды при запуске, потому что:

# sysctl fs.binfmt_misc.register=':CLR:M::MZ::/usr/bin/mono:'
sysctl: setting key "fs.binfmt_misc.register": Invalid argument

(здесь спор: ошибка ли это)

посмотреть, что получилось после регистрации можно так:

# cat /proc/sys/fs/binfmt_misc/CLR
enabled
interpreter /usr/bin/mono
flags: 
offset 0
magic 4d5a

В ядре главная опция - CONFIG_BINFMT_MISC, у меня при значении =y не пришлось монтировать файловую систему в /etc/fstab (она уже оказалась смонтирована, не знаю кем)

ещё в ядре есть

# zgrep BINFMT /proc/config.gz
CONFIG_BINFMT_MISC=y
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
CONFIG_BINFMT_SCRIPT=y

Мне непонятно, как сделать, чтобы файлы запускались без расширения (т.е. чтобы работали одновременно команды, к примеру, NuGet и NuGet.exe)

Также мне непонятно, о каких ограничениях говорили в статье (на сайте mono).

Но, по-моему, был ещё какой-то способ с пересборкой ядра с какими-то (другими?) опциями.

Ответы

▲ 1

это решается элементарно при помощи shell-«обёртки»:

#!/bin/sh
mono /путь/к/программе.exe

отредактируйте файл, вписав нужный путь и имя во второй строке, и поместите, например, в /usr/local/bin под именем, например, programma1.exe:

$ sudo cp путь/к/этому/файлу /usr/local/bin/programma1.exe

добавьте ему биты исполняемости:

$ sudo chmod +x /usr/local/bin/programma1.exe

и запускайте по имени:

$ programma1.exe

имя у такой «обёртки» — произвольное. programma1.exe — лишь для примера. можно заменить его на programma или что-либо иное подходящее и уникальное.