From wiki: The Microsoft compatibility stack provides a pathway for porting Windows .NET applications to GNU/Linux. This group of components include ADO.NET, ASP.NET, and Windows.Forms, among others. As these components are not covered by Ecma standards, some of them remain subject to patent fears and concerns.
You CAN use C# by sticking only to the international standard, and avoid any .Net extensions, but you are still under threat of patent litigation. And then there are many safer options, the first of all being Java.
Control. They are the only ones with a complete implementation.Why does Microsoft invent a language such as C#, instead of just using plain C or C++?
With C++, if you don't want to pay MS anymore, you switch to a different compiler, maybe even a free and open source one. With C#, you can't do it. The Mono guys are trying to offer C# users such a possibility, by reimplementing the standard from scratch, but many people in the Linux world don't feel comfortable depending on such technology.
Developing Linux apps for Mono/C# is almost the same as developing apps using Windows API and running it through WINE. It might work, but there are more free options that work just as well.
There are advantages to running your stuff over a VM. Android is doing it (Dalvik), and many languages such as Perl and Python are doing it.Just to be able to have a similar language such as JAVA, with their own extensions? I don't see the point in having something similar as JAVA, if you are not targeting multiple platforms.
There are also disadvantages, of course.