条件付きコンパイルでは、コードを理解して維持するのが難しくなる可能性があります。個人的に、私はそれに反対しています。
私の提案はJavaDepend
http://codebetter.com/patricksmacchia/2011/11/07/real-world-feedback-on-a-net-to-mono-migration/
、あなたはプラットフォーム固有のビットを分離する良いデザインパターンを利用することはあるの移植の経験はあなたを助けるかもしれないので、Windowsフォームプロジェクトです。
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とMonoのものを汎用呼び出しにラップして#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
この質問は物事の依存関係管理(参照)の側面を詳しく調べているため、正確な複製ではないと思います。 –