문제

내가 사용하는 C#Visual Studio 니다.순,그리고 나는 주변에 조금 모노와에서 리눅스 오픈,하지만 난 정말 이해가 어떻게 작동합니다.

쓰면서 앱 Windows 니다.NET,어떻게 이와 관련하 모노?나는 할 수 없 실행 Windows.exe 파일은 리눅스에서는 와인없이,그래서 그것은 애플리케이션을 실행을 개발하고 있습니다.

은 순수 목적이 있다.NET 라이브러리에서 해당하는 리눅스에서(그리고 다른 사람)에게 크로스 플랫폼 개발이 더 쉽습니까?예를 들어,만약 내가 비즈니스와 도달하고 싶었 Linux,고객 그러나 정말 사용하고 싶었.NET,다음 모노해야 될 나의 선택입니까?더 나가 없는가?

도움이 되었습니까?

해결책

Windows EXE 를 포함하 여러 개의"부속". 단순, 다.순 코드(=MSIL)의 일부만 EXE,이"진짜"기본 윈도 부분은 내부 EXE 역할을 하는 일종의 실행한다.net Framework 는 다음을 실행하 MSIL.

모노이 MSIL 및 실행은 그것을 무시하고,기본 Windows 실행 물건입니다.

또 다시,이것은 단순한 개요합니다.

편집: 나는 두려움을 내의 이해를 깊고 깊은 정보가 충분하지 정말 많은 세부 사항(내가 아는 대략 어떤 PE 헤더가 있지만 정말로 정보)이지만,저는 이러한 링크 유용:

NET 어셈블리 구조–Part II

.NET 기초-.NET assembly 구조

다른 팁

이것은 오래된 질문(이미 선택한 답변)그러나 내가 믿지 않는 이 질문은 정말 대답했습니다.

먼저 약간의 배경입니다.

어떻게는 않습니다.순?

전통적인 윈도우.EXE 파일을 바이너리 파일을 나타내는 시리즈 기계의 언어로 지시하는 귀하의 컴퓨터를 이해하고 이를 호출하는 Win32API 은 부품의 윈도우를 제공하는 서비스는 응용 프로그램을 활용할 수 있습니다.기계에 사용되는 언어는 매우 특정한 종류의 컴퓨터와 Win32 호출을 실행에 매우 의존 Windows.니다.NET 실행하지 않는다.

그것은 깨닫는 것이 중요하다.NET 실행파일(.EXE 파일)지 않은 실제로 기본 Windows 응용 프로그램입니다.윈도우 자체하지 않을 실행하는 방법을 이해 코드에서.NET 실행 파일을 실행합니다.귀하의 컴퓨터를 이해하지 않습니다.

훨씬 다음과 같 Java,니다.인터넷 응용 프로그램을 만들의 지침에서 언어라는 CIL(공용어)는 당신이 생각할 수 있으로 기계의 언어를 이상화되지 않은 컴퓨터 정말 존재한다.습니다.NET 소프트웨어의 구현이 이상화 기계라고 일반적인 언어 런타임(CLR).에서 동등한 자세라고 Java Virtual Machine(JVM).Java,상응하는 CIL 라 Java bytecode.CIL 은 때로는 MSIL(마이크로소프트의 중간 언어).

CIL 에서 실행되도록 설계되었습니 CLR(이상화기)하지만 그렇지 않으면 독립적인 플랫폼을 의미하는,CIL 은 걱정하지 않는 어떤 종류의 컴퓨터 또는 운영 체제를 실행하고 있습니다.

그냥 당신에 필요한 기본 버전의 자바 JVM 에서 각 플랫폼에서 실행할 Java,당신은 필요한 기본 CLR 버전을 실행합니다.NET CIL 실행 파일.CLR is a native Windows 응용 프로그램처럼 전통적인 Win32EXE 파일을 설명한다.CLR 자체 특정 Windows 구현 및 컴퓨터 아키텍처에는 디지 실행됩니다.

는 중요하지 않습니다.NET 언어를 시작으로(C#,visual basic,F#서식 파일은 새,IronRuby,Boo,etc.), 그들은 모든 컴파일을 CIL 바이트 코드.당신은 쉽게"분"CIL 프로그램 형태로의 객체 지향 어셈블리 언어는 쉽게 읽을 수 있는 인간입니다.를 작성할 수 있는 프로그램에서 CIL 직접 자신이 그러나 몇몇 사람 않습니다.

윈도우에서,CLR 컴파일하고 이 CIL 코드 Just-in-Time(JIT)바로 실행할 때의 실행-단기 전에 코드를 실제로 실행됩니다.즉,CIL 바이트코드 변환(컴파일)실제 기계 코드를 실행하는 기본적으로 컴퓨터에 있습니다.이 부분의 CLR 이라고 JIT 컴파일러 또는 종종 JIT.

날짜,마이크로소프트는 발표 네 가지 버전의 CLR:1.0,1.1,2.0,4.0.당신이해야 할 올바른 버전의 CLR 컴퓨터에 설치하려면 실행합니다.NET 실행 파일을 타겟팅된 런타임입니다.CLR2.0 지원합니다.NET2.0,3.0,3.5 응용 프로그램.다른 버전이다.NET,.NET 버전은지도 깨끗하게 CLR 버전입니다.

이외에 JIT/CLR.NET 제공하는 호스트의 라이브러리(어셈블리)구성하는의 나머지.NET 프레임워크 및을 제공하는 기능의 호스트 및 서비스.NET 응용 프로그램을 호출 할 수 있습니다.대부분의 이 어셈블리는 순수한 CIL 코드에서 실행되는 CLR.윈도우에서,어떤 통화로 Win32API 니다.경우 중심을 현재 위치에 맞출 수 있습니다 NET,를 설치하 CLR 클래스 라이브러리(framework),그리고 무리의 개발 도구가 포함되어 있습니다.각 버전의 CLR 일반적으로 필요한 완전한 세트의 이러한"프레임워크"어셈블리입니다.의 일부 버전.NET(eg.3.0 3.5)추가되는 추가적인 프레임워크 어셈블리를 업데이트하지 않고 CLR 또는 기존 어셈블리와 관련된 CLR.

휴대용 실행 파일(PE)파일 형식 Windows.EXE 파일을 전달에서 포함되는 헤더를 설명하는 실행 가능 및 파일을 식별합니다.NET 파일이나 native Win32 파일입니다.할 때 윈도우를 실행하려고 합니다.NET 파일을보고,이 헤더와 자동으로 호출합 CLR 귀하를 대신합니다.이것이 이유입니다.NET EXE 파일을 표시하는 기본적으로 실행 응용 프로그램을 시작합니다.

Ok,그래서 어떻게 단청 작동하는가?

모노를 구현하 CLR 에서 리눅스,Mac,및 다른 플랫폼입니다.모노 런타임(CLR)어로 작성된 응용 프로그램에서 주로 C 언어와 컴파일을 기계에 대한 언어 코드에 컴퓨터 시스템 설계 실행됩니다.다음과 같 Windows,모노 런타임은 특정을 운영 체제 및 기계의 종류는 당신이 사용하고 있습니다.

그냥 같은 윈도우에서,모노 런타임(CLR)컴파일하 CIL 바이트 코드입니다.NET 실행 Just-in-time 를 기본 코드는 귀하의 컴퓨터를 이해하고 실행합니다.이 방법입니다.NET 파일은"기본"리눅스를로도 있습니다.

포트 모노 새로운 건축해야 합 포트 JIT/CLR.이처럼 포팅하는 모든 기본 응용 프로그램을 새로운 플랫폼입니다.

어떻게습니다.순 코드에서 실행됩 Linux 나 Mac 에은 정말 다만의 문제가 얼마나 잘 CLR 구현에 이러한 시스템입니다.이론적으로,모노 CLR 실행할 수 있습니다.순 코드에서는 이러한 시스템보다 훨씬 더 MS 버전입니다.NET 는 응용 프로그램을 시작합니다.실제로,MS 구현은 일반적으로 우수한(하지만 모든 경우).

이외에 CLR,모노 제공하는의 나머지의 대부분은 라이브러리(어셈블리)하는.NET framework.의 경우와 마찬가지로 버전의 Microsoft.NET(에서 사실은 더욱 그렇다)모노 어셈블리로 제공됩 CIL 바이트 코드.이것은 가능한 가을*.dll 또는*.exe 파일을 모노에서 실행하고 수정하지 않은 Windows,Mac,리눅스라 CIL 은"원주의 언어"CLR 구현에 이러한 시스템입니다.

그냥 같은 윈도우에서,모노의 여러 버전을 지원하는 CLR 과 관련된 어셈블리:

초기 버전의 모노(전 1.2?) 만 지원 CLR1.0 또는 1.1.모노 지원하지 않았 큰 덩어리를 2.0framework 때까지 그것의 자신의 2.0 버전입니다.

모노 버전을 2.4 버전을 모두 지원됩니다 CLR1.1 및 CLR2.0 응용 프로그램.

로 시작하는 모노 2.6,CLR4.0 추가되었지만 CLR2.0 아직도 기본입니다.

로 시작하는 모노 2.8 4.0CLR 되었다 기본적으로 CLR1.1 이 더 이상 지원되지 않습니다.

모노 2.10 를 계속 사용하 4.0CLR 기본값으로도 지원 CLR2.0.

처럼 진짜입니다.NET(하지만 훨씬 적은 경우)은 거기서 몇 가지 어셈블리 모노는 전화로 네이티브 라이브러리입니다.을 만들기 위해 시스템이다.그 어셈블리 작업에 모노,모노 팀을 썼다는 리눅스 프로그램을 시뮬레이션 GDI+의 부분 Win32API 리눅스에서.이 라이브러리는 다음과 같습니다'libgdiplus'.컴파일하는 경우 모노 소스에서,당신은 당신다는 것을 알 수 있을 구축 할 필요가 이'libgdiplus'파일을 구축할 수 있습니다 전에'모노'.당신이 필요하지 않습'libgdiplus'on Windows 기 때문에 GDI+의 부분 Win32API 은 이미 부분은 윈도우.전체 포트 모노의 새로운 플랫폼에 필요한 이'libgdiplus'라이브러리 포함되어 있습니다.

지역에서의 디자인.NET 라이브러리는 지나치게 영향을 받으로 디자인의 윈도우,그리고 가난한 적합한 시스템과 같은 맥 또는 리눅스,모노 팀이 작성한 확장자.NET framework.모노 확장도 CIL 바이트코드와 일반적으로 잘 작동한다.NET.

달리 윈도우,리눅스는 일반적으로하지 않습니다.NET 실행파일과 실행 CLR 기본적으로 합니다.사용자는 일반적으로 실행 CLR 직접 입력하여'모노 appname.exe'또는 이와 유사한합니다.여기에서'모노'는 응용 프로그램을 구현하는 CLR 고'appname.exe'가 EXE 파일이 포함된다.순 코드를 실행할 수 있습니다.

하는 것을 쉽게 사용자를 위한 모노 응용 프로그램은 종종에 싸여 쉘 스크립트를 실행하는 CLR.이 숨기는 사실 CLR 는 그대로 사용하고 있습니다.그것은 또한 가능하다는 말이 리눅스를 실행하 CLR 때 사용하여 파일 PE 파일 형식입니다.이것은 일반적으로 수행되지 않으로 PE 파일의 형식도 사용됩 native Win32Windows 실행 파일이 있는 물론 CLR(Mono)는 지원하지 않습니다.

이 없는 기술적 이유 PE 실행할 수 없을 사용하여 리눅스는 다음 시작 중 하나는 시스템을 이해하고 기본 Windows 코드(와인)또는 CLR(모노)에 적합합니다.이것은 단순히 수행되었습니다.

앞뒤로

니다.순 코드는 막대기를"완전히 관리되는"코드는 것을 의미하지 않는 전화로 non-.NET 코드에서 잘 작동 모노에 모든 플랫폼입니다.나는 정기적으로 사용하여 컴파일합니다.NET 어셈블리에서 윈도우(는 내가 없는 코드)에서 리눅스와 맥.

수도는 모든 코드 내에 컴파일하 모노고 실행하는니다.NET 응용 프로그램을 시작합니다.을 제공할 수 있는 클라이언트가 어떤 코드를 컴파일 모노와 함께 걱정하지 않는 경우에는 그에,32-bit 또는 64-비트 윈도우에 대한 예입니다.클라이언트가 필요한 오른쪽 버전입니다.NET(오른쪽 CLR)설치 fo 물론입니다.CLR2.0 주변되었습니다 아주 오랜 시간을 내기할 수 있는 거의 모든 윈도우 사용자 문서를 공유할 수 있습니다.모노 컴파일러와 기타 코드 또 CIL 실행하고 그래서 그들이 잘 실행 윈도우에서 당신이 좋아하는 경우.

모노의 호환성은 좋은 충분히 큰 덩어리를 실제 Microsoft 아 ASP.NET MVC,취할 수 있(는 법적을 이렇게)에서 실제 MS 버전입니다.NET 에서 실행 Mac 또는 리눅스.일반적으로,모노 팀이 수행한 작업을 구현하 모두 CLR 의 나머지는 프레임워크(클래스 라이브러리/어셈블리).

ASP.NET

윈도우에서,Internet Information Server(IIS)하는 방법을 알고 있으로 호출 CLR 를 실행할 수 있습니다.NET 의 일부분으로 웹 응용 프로그램입니다.리눅스/맥이 있는 아파치 모듈(mod_mono)는 유사한 기능을 제공하는 아파치 웹서버.이 응용 프로그램은 written in C and 도 해야 합니다 이식해 새로운 아키텍처를 활용할 수 있다.

포팅 모노

이 논의가 확인된 부분의 모노으로 작성된"기본"파일에 있어야 합니다 시스템에서 실행할.습니다.

  • CLR(JIT 컴파일러를 포함)-일반적으로 알려진 모노
  • libgdiplus(시스템의하지 않는 기본적으로 지원 GDI+API[단 Windows 가])
  • mod_mono(을 허용하는 아파치를 호출하 CLR 습니다.NET 웹 응용 프로그램)

이 세 가지 요소의 추가와 함께 클래스 라이브러리를 제공합니다.NET 환경 보이는"기본"니다.NET 실행 가능한 파일을 실행해야합니다.

는 단청 작동합니다.

당신은 실제로 실행.NET.exe 파일을 모노와에서 리눅스.이 필요하지 않은 와인이다.사실,모노이 컴파일한 프로그램니다.exe 파일을 실행할 수 있는 하나와 모노 리눅스에서 또는 실행 파일로 응용 프로그램을 시작합니다.

모노는 오픈 소스의 구현 마이크로 소프트.NET CLR(Common Language 런타임).이것은 무엇을 실행합니다.NET 프로그램되지 않는 기본 코드에서 하지만 CIL(공용어),언어와 기계 중 중간 언어입니다.런타임이 걸리는 중간에 코드 변환 기계로 코드입니다.

의 현재 상태에서는 모노,당신이 취할 수 있습니다.NET 프로그램을 사용하는 주요 부분이다.NET(mscorlib.dll 고)실행을 그들에게 어디서나 모노 실행되는,단지 Windows.

그러나 그것으로 언급하는 모노는 오픈 소스와 당신이 사용할 수 없는 것입니다.NET 구현,그것은 몇 가지 제어 있지 않은 작업해야 합니다 또한 주의깊 P/를 호출하는 응용 프로그램이 사용자.g 응용 프로그램과 통신 MCI(멀티미디어 컨트롤러 인터페이스)에서 win32.하지만 내가 사용하여 모노 쓰기 프로그램#응용 프로그램 또한,하지만 나 또한 사용되는 내 Windows 응용 프로그램에는 일 없이 다시 컴파일하 언급했듯이 우리의 동료 프로그래머 위 즉,모노는 오픈 소스의 대안 Microsoft's.NET 기본적으로 구축하는 경우 중 WinForms 또는 프로그램#응용 프로그램을 모노이 컴파일을 만들 것입니다.exe 어셈블리는 각 파일에 대해,그리고 물론 당신이 원하는 경우 그것이 만들어 동적 링크 라이브러리(DLL),거의 그대로 수행됩니다.NET.그냥을 위한 제안을 작성하려고 일부 프로그램#(와 monodevelop 는 IDE 을 가지고 built-in gui 디자이너라고 stetic).그리고 물론 모노이 될 수 있습에 대한 좋은 대체로 웹 서비스를 만들 수 있습니다.물 및 호스트할 수 있습니다 그들은 아파치(기 때문에 리눅스 호스팅은 요즘보다 더 저렴 Windows 것)및 기타 웹 서비스 asp.net 이에서 작동 아파치와 함께 mod_mono 는 모듈에 포함되어야 합니다 apache.

트의 항목에서 그러나 나는 당신을 말하고 싶었 몰래 엿봄에서 경험이다.

또한 당신이 볼 수 있을 MoMA(는 경우에 당신의 목표는 포트 응용 프로그램에서 우승을 Lin).

모노 마이그레이션 해석기(MoMA) 도구를 식별하는 데 문제할 가 포팅할 때다.Net 응용 프로그램을 모노.그것은 정확히 파악 플랫폼 특정한 통화(P/Invoke)및 는 지역에는 지원하지 않는 Mono 프로젝트입니다.

MoMA

여기에는 웹 애플리케이션을 비교하는 형태의 BCL 이미에 의해 구현되는 모노와..NET Framework3.5

http://mono.ximian.com/class-status/2.0-vs-3.5/index.html

더 마이클의 응답,나는 당신이 다시 컴파일해야에 단청에 대한 응용 프로그램을 실행 하노 runtime.예외를 존재할 수 있습니다.나만을 재생 모노 조금,나는 항상 다시 컴파일된다.나는 결코 실행하려고 했.인터넷 응용 프로그램에 직접 모노.

또한,모노 1.9 있어야합니다.NET2.0 규정을 준수합니다.모노 올리브와 달빛을 추가합니다.NET3.0(적 WPF)및 Silverlight 기능이 있습니다.

그것은 당신을 도움이 될 수 있습, 어떻게 모노의 C#컴파일러에서 작동합니까? 그 뿐만 아니라 이해 모노 C#컴파일러 책입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top