My experience is from 2011, but I'm sure that you will have to experiment to see the work, and what is not - this is my experience with Mono.
Most of your questions are extremely broad, and I think your question will be closed soon.
As for your last question, that was the way I did it, and it worked (developing in VS-> deploy in Linux), but you should know that:
- just because your code will work in the VS debugger does not mean that it will work during deployment;
- there is no one-to-one comparison between Mono and .Net. Even when everything works, this does not mean that they will work the same way. For example, the implementation of the encryption code used for http cookies was very different between mono and .net.
source share