There are actually several C# compilers, some which are open source and cross-platform. Not all of them implement all the proprietary portions of the .NET framework (portions of the framework are not standard C#) but some do. And that "one platform" also happens to be the platform with 90% market share in the personal computer market, so if you're targeting an application for that market, being Windows-only is no big deal at all.One compiler on one piddly little platform. What are you going to do when a customer offers you $100k to port your application to AIX? Hell, even Java would be a better choice.
Obviously C# isn't the best tool for every job, but that doesn't mean it's never the best tool for any job. A hammer is a perfectly useful tool even if it can't drive screws; in fact you'd be foolish to spend your time driving nails with a screwdriver. Different situations are best handled in different programming languages, and C# happens to have a very nice and rather large niche for designing Windows GUI applications. Choose the tool based on the job, not based on your feelings about the tool.