Before I lose half my audience: last week I broke down and picked up a 13" MacBook Pro. I even brought it with me as my primary PC during this week's Microsoft Build conference.
Fortunately, today, thanks to some amazing work from the folks at Microsoft I successfully brought over some C# love from the Windows world and successfully got .Net running on OS X without paying $1,000 for a Xamarin License.
I'll get to the step-by-step instructions for how to build .Net on OS X with the newly announced Visual Studio Code and a lot of command line foo. But first a little background.
Where Did Things Go So Terribly Wrong?
But when I moved on from my project and I needed to return the the company MacBook, I wasn't quite ready to return to my Hackintosh ways on my current side project (a Siren of Shame Mac client). So to the astonishment of all who know me I picked up a reasonably priced MacBook Pro.
But a funny thing happened. After using Yosemite for a while I realized the new OS addressed several of my biggest complaints from the previous work-provided Mavericks OS (no OneNote, and crappy multi-monitor support). I also discovered BetterSnapTool which is a must-have if you're accustomed to Windows.
So when I needed a primary computer to take with me to the Microsoft Build the MacBook was a natural choice for it's fantastic form factor and superior battery life. And at this point I have to admit this little thing is growing on me (I'm even writing this article on it now).
Visual Studio For Mac?!
So I may not do it myself any time soon, but I can see why someone might want to live on a Mac but still code Visual Studio and C#. And I guess Microsoft realizes that too! To date there have been some options. Mono has always been one, although it's not always 100% compatible with the .Net framework, and for a hefty price Xamarin can get you a nice Cocoa UI with C#.
But recently Microsoft announced that ASP.Net 5 would run natively on Linux and Mac (via kestrel). And then yesterday Microsoft announced a new cross platform IDE known as "Visual Studio Code". Since I had the Mac and some time I figured I'd give running .Net natively without Mono using Visual Studio Code a try. Turns out it was super easy and only took about 15 minutes.
Touching Story Bro, Show Me The Code
To do it first off download and install the Visual Studio Code IDE they announced today. Don't get your hopes up, it really doesn't hold a candle to Visual Studio or even Xamarin Studio for that matter just yet. The important thing is it's super fast and lightweight, it runs on Windows, Mac, and Linux, and presumably Microsoft is going to grow this thing into something awesome.
Next, install the ".Net for Mac and Linux" otherwise known as the .Net Execution Environment (DNX). To do that first install homebrew, which is like Chocolatey for PC's. It makes installing and uninstalling apps super easy. To get it run the following from a terminal to:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Next download and install the .Net Verison Manager (DNVM) via Homebrew, which will automatically install DNX:
brew tap aspnet/dnx
brew install dnvmIf that worked you should be able to run DNVM by doing
source dnvm.shWhich should get you something like this:
In Visual Studio when you File -> New Project, you get a ton of project types to choose from that start you down the path of success with a lot of boilerplate code. That doesn't happen on a Mac with Visual Studio Code (it doesn't even have a File -> New Project option), but fortunately the Yeoman project will accomplish the same thing.
To install Yeoman, first install node if you haven't already:
brew install nodeThen install Yeoman
npm install -g yoNext, you need to install the .Net templates from the OmniSharp/generator-aspnet project. To do that:
npm install -g generator-aspnetAt this point you're finally ready to do the equivalent of File -> New Project. Change directories to you dev directory (e.g. cd ~/dev) and then
yo aspnetIt will guide you through a wizard and then generate you a hello world app.
If you select a Console App you can run it by simply doing:
dnx . runAnd if you're lucky you'll get something like this:
dnu restoreTo download the project's dependencies. And you should be good to go.
Modifying this process for an ASP.Net project is only slightly more involved as you need to set up kestrel.
If you find yourself with on OSX either because you love the ecosystem, because it was forced on you, or perhaps like me you find yourself maybe kinda liking it just a little, yet you also love the C# language and those awesome features you can't get anywhere else like LINQ, and async/await then there's some good news. With a little extra work and thanks to some amazing work from Microsoft it's now possible to have your cake and eat it too.
Please post in the comments or hit me up on twitter if you found this post useful or if, more likely, I got something wrong.