私はMonoと.NET C#を調査しており、将来プロジェクトが開発されたときにLinuxサーバーでコードを実行する必要があります。この時点で、私はASP.NET MVCとMonoを見てきました。
私はUbuntuディストリビューションを実行しており、Webアプリケーションの開発を行いたいと考えています。他の開発者の一部はWindowsを使用しており、Visual Studioで他の.NETアイテムを実行しています。
MonoはVisual Studioが提供しないことを何が提供しないのですか?
これを後でLinuxで実行する場合、MonoDevelopを使用すべきではありませんか?
後でMonoで問題になる可能性のあるサードパーティのツールやアドインはありますか?
MonoはVisual Studioが提供する機能を提供しませんか?
おそらくMonoDevelopはあなたがここで意味するものです。 MonoDevelopは、GTKベースのLinux、Mac OS X、Windowsでクロスプラットフォーム開発を提供します。ただし、明らかな理由からVisual Studioほど洗練されていません。数百人ではなく3人で作成しています。いくつかの素晴らしい機能、特にそのソース管理プラグインアーキテクチャがあります。ただし、Visual Studio Expressは無料であるため、Windowsを使用するメリットはそれほど多くありません。
Visual Studioと同じ.csproj
および.sln
形式を使用しますが、XMLドキュメント形式は異なります。
これを後でLinuxで実行する場合、MonoDevelopを使用すべきではありませんか?
前述したように、プロジェクトの形式は相互運用可能です。
後でMonoで問題になる可能性のあるサードパーティのツールやアドインはありますか?
Visual Studioとは異なり、Monodevelop用のアドインはそれほど豊富ではありません。 Monodevelopで使用するものは、.csprojファイルにまったく影響を与えません。なぜなら、Visual Studioがそれを読み取ることができないものは、一般的に無視するからです。
人々が言ったように、MonoDevelopとMonoを混同しないでください。 MonoDevelopはIDEで、もともとは(フォークされた)SharpDevelopからのものでした。
Monoは、Microsoft CLRおよびフレームワークライブラリを「先取り」するクロスプラットフォームフレームワークです。
この分野での経験はあまりありませんが...
Mono Project Roadmap には、MS.NETと比較して、Monoにはない、新しく予定されている機能の概要が記載されています。 Monoのクラスが.NETと同じ場合でも、互換性は100%ではないことに注意してください(ただし、それが一般的な目標です)。 Monoに欠けているものの包括的なリストが存在するかどうかはわかりません。
MonoDevelopはWindowsとLinuxの両方で利用できるようになったので、おそらくそれを使用するのが最善です。ただし、MonoDevelopはVisual StudioやSharpDevelopと同じプロジェクトファイル形式を使用しているように見えるため、IDEを混在させることができます。
もちろん、サードパーティの.NETライブラリを使用する場合、それらの多くはモノでテストされていないことに注意してください。特に、P/Invokeを使用するものは、モノ用Linuxでは機能しません。ただし、monoとの非互換性のほとんどは軽微であり、オープンソースライブラリを使用している場合は、発生した非互換性をいつでも修正できます。
Mono Tools for Visual Studio もご覧ください。ビジュアルスタジオの開発者がモノプラットフォームをターゲットにしてテストできるようにします。
あなたは常にサポートを受けること、および/または主にLinuxでソフトウェアを使用することを目指していますね?これは実際、私がしばらく前にカンファレンスでMono開発者に尋ねた質問であり、基本的にはあなたがそれで何をしたいかということまで煮詰められました。
常にLinuxで動作させたい場合は、Monoを使用してください。 Windowsのみに関心がある場合は、Visual Studioを使用してください。
Monoを使用している場合は、すべての開発者でMonoDevelopを使用してください。それは後で人生をずっと簡単にするだけであり、あなたが書いたものは誰にとっても確実に機能するでしょう。
残念ながら、.NETがさらに進んでいること、Monoが追いついていること、別のアドオンについては別として、Mono対.NETの正確な制限/利点に対する答えはわかりません。
開発者が特定の機能のためにMonoで開発する必要がない場合は、すべてWindowsでVisual Studioを使用することをお勧めします。次に、Monoでアプリケーションをテストします
個人的には、3番目の方法を試したときに小さなトラブルがたくさん発生しましたが、幸いにも回避策を見つけることができました。
Monoに触れたときだけ、アプリケーションのどの部分を調整する必要があるかがわかります。
あなたがそれを助けることができるなら、それはリモーティングのMono実装を避けることを勧めます。予期しない問題が発生しているようで、デバッグは簡単ではありません。
Linuxをサポートできるように、Monoに移植しようとした非常にリモーティングの重い製品がありました。リモーティングの問題を解決できないため、結局、Linuxをサポートするという試みを完全に放棄する必要がありました。
警告:私の経験は時代遅れかもしれません。以下のコメントを参照
LinuxでASP.NETプログラムを実行するためにMonoDevelopは必要ありません。開発サーバー(VMWareまたは実際のサーバー)に共有フォルダーを作成し、Monoに欠けているものを簡単に回避できるように頻繁にテストします。
これは、Ubuntuサーバーでホストする.NET Remotingプログラムで使用しているのと同じアプローチです。しかし、私は逆のことをしています。私はソロプログラマなので、Windows開発マシンで共有フォルダーを作成し、Ubuntuテストサーバー(vmware'd)でその共有フォルダーにアクセスします。 ASP.NETに関するもので、Ubuntuテストサーバーに変更が反映されない場合は、ターミナルでUbuntuテストサーバーのWeb.Configファイルに触れるだけです。つまり、touch Web.Config
、次にページを更新します
MonoはASP.NETの完全に機能する実装を備えています。これには、ASP.NET WebフォームとWebサービスの完全なサポートが含まれます。これは基本的に、.NET Frameworkを使用して開発したASP.NETアプリケーションがMonoで動作することを意味します。データアクセスの変更、.NET Framework BCLタイプへの依存の削除など、明らかに必要な変更がある可能性があります。 Mono- Oracleユーザー-.NetプログラミングC#:ubuntu 11.04