36

大規模または中規模のプロジェクトで、オープン ソースの .NET 実装である Mono を使用した人はいますか? 実世界の本番環境での準備が整っているかどうか疑問に思っています。安定していて、高速で、互換性があり、使用するのに十分ですか? プロジェクトを Mono ランタイムに移植するには多大な労力が必要ですか、それとも Microsoft のランタイム用に既に記述されたコードを取得して実行するだけの十分な互換性がありますか?

4

8 に答える 8

31

私は多くの社内および商用プロジェクトに使用して大きな成功を収めました。私の警告:

  • 多くの単体テストを作成し、それらがすべて Mono でパスすることを確認してください。これにより、多くの手間が省けます。
  • どうしても必要な場合を除き、埋め込み API を使用しないでください。使い方はとても簡単ですが、有効なメモリをガベージ コレクションしたり、すべてのメモリをリークしたりするのは非常に簡単です。
  • 決して SVN に近づかないでください。選択の余地がない限り、独自のものをコンパイルしないでください。SVN では状況が頻繁に変化するため、プロジェクトが非常に大きい場合、リリース バージョンで機能しないものを実装することになる可能性が非常に高くなります。
  • 長い間自分で問題を解決しようとせず、IRC チャネルを使用してください。そこの人々は助けになり、あなたは日々自分自身を救うでしょう - 私がしたのと同じ間違いをしないでください.

幸運を!

編集: ソース (リリースまたは SVN) から独自のものをコンパイルしないと言う理由は、リリース バイナリとは異なる構成を行い、ガベージ コレクションなどでバグを隠すのが簡単だからです。

編集 2: 質問の 2 番目の部分に回答するのを忘れました。私の場合、コードの移植に問題はありませんでしたが、MS 固有のライブラリ (WinForms、ASP.NET など) は使用していませんでした。System.* のみを使用している場合は問題ありません。それを超えると、問題が発生する可能性があります。ただし、Mono 2.0 は非常に堅実です。

于 2008-10-08T07:44:10.930 に答える
5

私はMonoでいくつかの経験がありました。

純粋な .NET のもの (ビジネス ロジック、コントローラー、アルゴリズムなど) は問題なく移植できます。しかし、オペレーティング システム、UI、サービス、または永続性と相互作用するコンポーネントに奇妙なことが現れ始めています。したがって、デバッグとハッキングの準備をしてください。

役立つ可能性があるもの:

  • コンポーネント駆動型開発- コードが Windows .NET と Mono で再利用され、相違点が分離されてテストされます)
  • 継続的インテグレーションを実行し、Mono および MS.NET に対してすべてをチェックすることで、考えられる問題を可能な限り迅速に発見できるようにします (自動化されたデプロイとサニティ チェックも推奨されます)。
  • Mono でのシェル開発用の UI コンポーネント スイートは多くありません。
  • コンポーネント ベンダーが自分のコードが「Mono と互換性がある」と言うとき、それは「Mono で動作し、サポートされている」と同じではありません。

現在、いくつかの企業が Mono を使用して生産を開始していますが、私は次の理由により、そこに突入する前にまだ待っています。

  • 適切で商業的にサポートされている UI コンポーネント スイートの欠如
  • 効率的なガベージ コレクションに関する問題
  • 最適なデバッグ エクスペリエンスではありません (VS 2010 の従来のデバッガーと比較してください)

追伸: 完全に管理されたクラウド コンピューティング ソリューション (単なる VM ではなく、.NET の Hadoop に相当するもの) を提供する会社があれば、これらの問題にもかかわらず、私は参加せざるを得なくなります。

于 2009-06-13T11:35:37.013 に答える
5

私は、Mono が MS とほぼバイナリ互換であることを発見しました。したがって、私は単純に MS でコンパイルし、Java のようにどこでも実行できます。

Linux での Mono のパフォーマンスは、MS に非常に近くなり、Windows で Mono を実行すると 5 ~ 10 倍遅くなるのに対して、場合によってはわずか 2 倍遅くなります (ただし、実際には MS に固執する必要があります)。

于 2008-10-08T08:10:29.363 に答える
3

ASP.NET 2.0 の作業を行っている場合は、非常にうまく機能します。Winforms は機能する可能性がありますが、表示の問題が発生する可能性があります。フォーム アプリで互換性が必要な場合は、クロスプラットフォームであるため、GTK# をお勧めします。

提案されているように、徹底的にテストする限り、それが実行可能なオプションである場合は、必要なwinformsでない限り、商業的に使用することに同意します. 私の意見では、私は今のところそれを避けます。現時点ではサポートされておらず、今後もサポートされない可能性があるため、WPF は忘れてください (ただし、Linux 用の Silverlight とも呼ばれる Moonlight に取り組んでいます)。

于 2008-10-08T07:58:25.787 に答える
1

私自身は Mono を使用したことはありませんが、FogBugz が Mono を使用して Linux プラットフォームで Lucene.NET を提供していることに興味があるかもしれません。(私がこれを知っているのは、ジョエルがスタック オーバーフロー ポッドキャスト #24 で言及したからです。)

于 2008-10-08T07:50:41.323 に答える
0

実稼働環境にはたくさんのシェルアプリがあります。

私は@cody-brociousに同意し、多くの単体テストを作成します。過去に、正規表現がWindowsCLRとまったく同じように機能しないことを発見しました。

実際には、コンパイルして実行するだけで、思ったよりも簡単です。プロジェクトでNAntを使用すると、移行がさらに簡単になります。

私は通常、ソースリリースからmonoをインストールしますが、問題はありません。

于 2008-10-09T12:11:48.863 に答える
0

もちろん、特に Mono 2.0 がリリースされた後は可能です。Mono 2.0 は、実際のプロジェクトの準備ができています。

これを確認できます

于 2008-10-22T15:11:57.670 に答える
0

暗号化/復号化ツールに使用しましたが、正常に機能しました。

将来的には、Mono/C# の使用を検討しますが、Windows 上の .Netと 100%まったく同じになるとは思っていません。

于 2008-10-17T18:45:55.260 に答える