조건부 컴파일은 코드를 이해하고 유지 관리하기 어렵게 만듭니다. 개인적으로, 나는 그것에 반대한다.
나의 제안은 포팅 경험이 당신을 도울 수 있도록
http://codebetter.com/patricksmacchia/2011/11/07/real-world-feedback-on-a-net-to-mono-migration/
JavaDepend는 윈도우 Forms 프로젝트를, 당신은 플랫폼 특정 비트를 분리하는 좋은 디자인 패턴을 활용하는 것입니다.
WinForms executable (.exe) -> Platform adapter (.dll) -> Windows (.Windows.dll)
|
--> Other platforms (.Unix.dll)
이렇게하면 항상 전체 솔루션을 함께 컴파일하고 함께 패키지화 할 수 있습니다. 런타임시 어댑터는 플랫폼 감지 후 올바른 플랫폼 어셈블리/어셈블리를로드 할 수 있습니다.
아마도 WPF for Windows를 사용할 수 있습니다. 비즈니스 로직 코드에서 WPF 비트를 분리 한 다음 다른 플랫폼 (Linux 용 GTK #, OS X 용 MonoMac)에 UI를 다시 써야합니다. 이러한 접근 방식은 이런 식으로
WinForms/WPF executable (.exe) -> Platform independent biz-logic code (.dll)
^^
MonoMac executable ---| |
|
GTK\# executable ------|
으로 시각화 할 수 있으며, 각 플랫폼에 대해 다르게 포장해야하지만 핵심 어셈블리/어셈블리는 동일 할 수 있습니다.
#ifdef/#endif 블록을 사용하여 모노 환경을 확인하고 적절한 코드를 입력하거나. NET 및 모노 항목을 일반 호출로 랩핑하고 #ifdef를 사용하면 MONO 환경에 대한 정의가 무엇인지 잊어 버릴 수 있습니다 아마도 MONO : P) –
가능한 복제본 [Mono 대 Microsoft .NET에 대해 조건부로 C#을 컴파일 할 수 있습니까?] (http://stackoverflow.com/questions/329043/how-can-i-conditionally-compile-my -c-sharp-for-mono-vs-microsoft-net) – skolima
이 질문은 종속성 관리 (참조) 측면을 더 많이보고 있기 때문에 정확한 복제본이라고 생각하지 않습니다. –