I see lots of old information on this question, and lots of articles flying around the Interwebs, but I can't tell quite where things are at.
Basically, I want to write C# code that I can then compile into a native Windows application, and also compile into a native Mac application (no Parallels, no Wine, etc.). Can this be done?
Are products like Xamarin the way to go? Xamarin's web site says "Use the same language, APIs and data structures to share an average of 75% of app code across all mobile development platforms." but I can't tell what that 25% of app code that is platform-specific might entail ... I also can't tell if they target OSX and Windows, their web site is very mobile-device-centric.
Summary: Xamarin is not designed to make cross-platform applications - what they give you is a way to write Mac applications in C#, using the Mac's GUI operations. What they recommend is to write all your "business logic" cross-platform, and then write 2 completely separate GUIs - one for Windows, one for Mac.
C#/Qt seems to be in its very early phases (though if anyone is stumbling onto this article in 2016 or later, go check it out).
It appears that mono will do cross-platform including GUI, but only if you use Windows Forms.