'mono foo.exe'를 입력하지 않고 모노 프로그램 실행


13

우분투에서 .net 프로그램을 실행할 때 foo.exe 대신 "mono foo.exe"를 입력하거나 아이콘을 두 번 클릭해야합니다. foo.exe를 실행할 수있는 방법이 있습니까?

답변:


17

이 링크가 도움이 되나요? 러닝 모노

binfmt 사용에 관한 모노 프로젝트에서 :

네이티브가 아닌 바이너리로 .exe 등록 (Linux 만 해당)

이 기능은 Linux 전용 기능이므로 개발자가 스크립트의 이식성을 제한하므로이 솔루션을 배포하지 않는 것이 좋습니다.

또한이 메커니즘은 응용 프로그램 배포 지침 에서 의도 한대로 작동하지 않습니다 .

또한 시스템 전체를 변경하고 binfmt를 사용하여 exe 파일을 비 이진 바이너리로 등록 할 수 있습니다. 그런 다음 exe 파일을 시작하려고 할 때 커널은 모노 인터프리터를 실행하여 명령을 처리합니다. Binfmt를 사용하여 WINE을 사용하는 Windows 실행 파일 또는 JVM을 사용하는 Java .class 파일을 시작할 수도 있습니다. 커널에 exe를 등록하려면 :

다음 명령을 사용하여 루트가되어 커널에서 binfmt 모듈을 켜십시오 :

sudo apt-get install binfmt-support
modprobe binfmt_misc

또한 부팅시 modprobe명령 /etc/rc.local이 실행되도록 부팅 스크립트에 명령 을 추가 할 수 있습니다.

/etc/fstab파일에 아래 줄을 추가 하십시오.

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

그런 다음 시스템을 부팅 할 때 다음 명령을 실행하십시오.

echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register

파일 시스템에서도 .exe 파일을 실행 파일로 표시해야합니다.

chmod +x myprogram.exe

이것은 커널을 변경하는 것이 아니라 시스템을 부팅 할 때로드하는 모듈 만 변경합니다. 다시 말해, 이러한 변경 사항을 잃어 버릴 염려없이 커널을 업그레이드 할 수 있습니다. 마찬가지로이 섹션에 나열된 호출 방법에 영향을주지 않고 Mono 런타임을 업그레이드 할 수 있습니다.


binfmt_misc 옵션의 경우 +1, Linux에서 가장 작은 해결 방법
mario

1
FATAL: Module binfmt not found12.04에 도착
RiaD

10

시작 스크립트를 작성하십시오.

일반 텍스트 편집기를 열고 다음을 추가하십시오.

#!/bin/bash
mono foo.exe &

설정에 따라 foo.exe의 전체 경로를 사용해야 할 수도 있습니다.

파일을 예를 들어로 저장하십시오 foo.sh.

그것을 실행 가능하게 만드십시오 :

sudo chmod a+x foo.sh

이제 두 번 클릭하여 foo.exe를 시작할 수 있습니다 foo.sh.



1

나는 이것이 오래된 질문이라는 것을 알고 있지만 Google을 통해 그것을 발견하고 생각하게했습니다. 이것은 주요 핵이지만 다운로드 할 수 있습니다

https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh

집에 다음을 .bashrc에 추가하십시오.

source ~/.bash-preexec.sh
preexec() {
  if [[ $1 =~ [^\s]+\.exe$ ]]; then
    eval "$1() { return 1; }"
    export -f $1
    /usr/bin/mono $1
  fi
}
precmd() { [[ $1 =~ [^\s]+\.exe$ ]]; unset -f $1; }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.