Some important point in addition to the correct answer by Mike Meinz, Solution 1:
You can develop applications on Windows and run it on other platforms, and visa versa,
without recompilation.
You need to develop applications more accurately, keeping to standards and avoiding P/Invoke of platform-specific methods. That is, all or most of the code should be limited to BCL (which is standardized). Some non-standard libraries are also implemented in Mono, notably
ADO.NET
and
System.Windows.Forms
.
For a formal compatibility check, you can use The Mono Migration Analyzer (MoMA):
http://www.mono-project.com/MoMA[
^].
On Windows, you can develop and test your code on Windows directly, and than on Mono for Windows. This second step already gives you a good assurance.
If you want to develop on Linux, you can use
MonoDevelop
IDE:
http://en.wikipedia.org/wiki/MonoDevelop[
^],
http://monodevelop.com/[
^].
It is also available on Windows though. Besides, you can use different but related IDE for Windows, #develop:
http://en.wikipedia.org/wiki/Sharpdevelop[
^],
http://www.icsharpcode.net/OpenSource/SD/Default.aspx[
^].
—SA