답변:
우리는 내가 일하는 대기업에서 사용했습니다. 우리는 프로젝트 시작부터 계획을 세우지 않았지만 그 방식으로 해결되었습니다.
우리는 .NET에서 개발 한 내부 프로젝트를 가졌습니다. UAT에 들어간 후 비즈니스 소유자는 내부 직원뿐만 아니라 일부 고객에게 앱을 열기를 원했습니다. 외부 (DMZ) 서버의 대부분은 Linux 기반이며 DMZ에있는 Windows 서버는 적합하지 않습니다 (용량에 너무 가깝습니다). 새로운 하드웨어를 구매하는 대신 누군가 Mono에서 앱을 실행하도록 제안했습니다. 우리는 며칠 동안 자체 테스트를 수행 한 다음 앱을 QA, UAT에 출시했습니다. 문제가 없었습니다.
프로젝트를 시작할 때 요구 사항을 받았다면 .NET으로 작성하도록 선택하지 않았을 수 있지만 이는 매우 늦은 요구 사항 변경에 대한 좋은 결과였습니다. 이제 다시 등장하면 Mono에 성공적으로 배포 할 수 있다고 확신합니다 (결국 코드를 조정해야한다고 생각하지만 운이 좋았다고 생각합니다).
나는 상업적으로 모노를 사용하지 않았지만 Windows 회사에서 일하기 때문에 개인적으로 사용하지만 개인적으로 Linux 사용자이기 때문에 직장에서하는 일을 재사용 할 수 있습니다.
전반적으로, 나는 다음과 같이 말하는 Miguel de Icaza에 동의합니다.
- .NET 응용 프로그램의 25 %가 모노로 즉시 작동
- 다른 25 %는 하루 이내에 작동하도록 만들 수 있습니다
- 일주일 이내에 25 % 더 일할 수 있습니다
- 마지막 25 %는 응용 프로그램 (WinForms / COM)을 완전히 다시 작성해야합니다.
모노는 꽤 잘 작동하지만 몇 가지 문제가 있습니다.
- .NET <= 2.0에 대해서만 VB.NET 지원
- Windows 인증이 구현되지 않았습니다
- WPF가 구현되지 않았습니다
- 불완전한 WCF 지원
- Entity Framework가 구현되지 않았으며 구현 계획이 없습니다.
- "ASP.NET 웹 파트"가 구현되지 않았습니다
- COM-interop 지원 안함
- 버전 15.5 (최신)의 Sybase 연결이 작동하지 않습니다
- C # 클래스 라이브러리의 버그 및 불완전 성 (예 : XML은 모노 <2.6에서 버그가 있음)
- Linux 웹 브라우저 컨트롤에는 GTK #가 필요합니다
그런 다음 사소한 문제 :
- Windows Forms는 작동하지만 항상 올바르게 렌더링되는 것은 아닙니다
- MonoDevelop는 윈도우 폼을 디자인 할 수 없습니다
- MonoDevelop 'step through'디버깅이 실제로 작동하지 않습니다
- 5 시간 후 모노 서비스 충돌 ...
내가 말할 수있는 것을 형성하십시오 :
- WebServices 기능이 우수합니다
- WebApplication을 실행하면 WebParts를 사용하지 않는 경우 상당히 잘 작동합니다.
- WindowsForms를 실행하면 항상 아주 멋지게 보일 수는 없습니다 (최소한).
- Microsoft Reporting Service와 동등한 기능은 없습니다 (FYIreporting이 가장 유사하지만 1 년 이상 활동이 느리고 버그가 많으며 매우 불완전합니다)
- Word 또는 Excel 문서를 만들어야하는 경우 문제가 발생합니다.
Linux에서 .NET을 개발하려는 경우
- ASP.NET을 개발할 수 있습니다 (디버깅 및 단계별 작업이 매우 나쁩니다)
- 실제로 Linux에서 WinForms를 개발할 수 없습니다
- WinForms 대신 GTK #을 사용해야합니다
다른 말로:
- Mono는 웹 응용 프로그램과 WebServices 및 MailServers를 실행하고 있습니다.
- 그러나 WindowsForms 응용 프로그램을 실행할 수 없으므로 GTK #로 응용 프로그램을 작성해야합니다.
- 보고 솔루션 및 MS 파일 형식 지원 (또는 작업 라이브러리)이 없습니다.
편집 (2015 업데이트) :
지금까지 '스텝 스루'디버깅이 훌륭하게 작동하고 있으며 MonoGet을 사용하여 nuGet 종속성이있는 경우에도 Linux에서 웹 응용 프로그램을 개발할 수 있습니다. Excel 및 Word 라이브러리의 문제도 사라졌으며 이제 엔티티 프레임 워크가 오픈 소스입니다. 나머지는 거의 "있는 그대로"(단일 서비스가 고정되어 있는지 모르겠지만 그렇게 희망합니다).
개선 된 점은 이제 배포판에 대한 현재 패키지를 가질 수 있다는 것입니다. 즉, 다음 버전의 릴리스까지 기다릴 필요가 없습니다. 데비안 / 우분투는 최신 모노 버전을 얻을 때까지 직접 컴파일 할 필요가 없습니다. ). 이것은 중요한 시간 낭비입니다.
또한 Roslyn의 출시로 VB.NET 지원은 가까운 시일 내에 훨씬 나아질 것입니다.
우리 회사는 주로 대부분의 .NET 데스크톱 응용 프로그램을 개발하고 Mono에서 실행되는 Linux 버전을 릴리스하므로 엔터프라이즈 Windows 기반 솔루션에 Mono를 사용할 수있는 곳이 있습니다.
우리는 사용자가 별도로 설치하지 않아도 응용 프로그램 설치와 함께 Mono를 패키지합니다 (이 방법으로도 버전을 제어합니다).
많은 기업이 가질 수있는 주요 관심사는 Mono와 Microsoft 간의 라이센스 문제입니다. 내 이해는 Microsoft가 Mono가 핵심 .NET 기술을 사용할 수 있다는 데 공식적으로 동의했지만, 일반적으로 많이 사용되는 것들을 포함하여 외부에서는 Microsoft와 합법적 인 입장을 표명하지 않는 법적 영역이 더 많다는 것입니다. 다른.
그것은 분명히 라이센스 비용을 요구하거나 특허 위반을 고소 할 가능성을 열어 둡니다. 현재 행동 방식에서 발생할 가능성은 거의 없지만 대부분의 기업은 이러한 불확실성을 좋아하지 않습니다.
모노에는 공간이 충분하지 않다고 생각합니다.
Java는 이미 커뮤니 케이 션과 오픈 소스의 방대한 엔터프라이즈 급 라이브러리 및 도구로 커뮤니티가 풍부하고 Linux에서 플랫폼으로 구축되었습니다. 특정 상황이 아닌 한 Linux (또는 Mac)를 대상으로 새 프로젝트를 시작할 때 Java보다 Mono를 선택해야 할 이유가 없습니다 (Walter 's answer 참조).
모노를 사용하기 전에 프로그램에 직렬 포트에 대한 경로 문자열 (Path.Combine () 사용) 또는 "COM"접두사 (정수 대신 문자열 만 허용)에 대해 하드 코딩 된 '\'가 없어야합니다.
잘 작동하는 것 :
발생한 문제 :
내부적으로 모노 (예 : ERP 시스템)를 제어 된 환경으로 사용하는 것이 좋습니다.
크로스 플랫폼 환경에서 실행해야하는 .NET 코드가 이미있는 경우 Mono는 훌륭한 대안입니다. Mono는 비즈니스 세계에서 특히이 문제를 해결하기 위해 광범위하게 사용됩니다.
크로스 플랫폼이 필요하다는 것을 알고 .NET으로 프로젝트를 시작하는 데 대한 변명으로 Mono의 존재를 사용하는 것에 반대합니다. 그 이유는 .NET의 최신 기술과 Mono의 개발 속도 사이의 차이 때문입니다.
당신이 다른 한편, 만약 않는 미래의 프로젝트에 모노를 사용하려는 모노 이후 두 번째 대안은 크게 전체 .NET의 기능의 일부이기 때문에, 나는 모노 프레임 워크를 대상으로하고 .NET에서 실행하도록주의한다.