Recently, I have been having some fun with C# and Mono. I decided to try to abandon visual studio, resharper, and windows and start writing from vim on my unix machines. Inspired by Gary Bernhardt and Destroy all Software.
vim
My vim configuration started to become a giant mess, as I started moving from Windows to Ubuntu to OSX. So a few months ago, I totally abondoned my vim configuration in favor of Janus.
Janus, is a vim distro with a bunch of plugins, snippets, and goodies all baked right in. This makes it incredibly easy to switch from your editor of choice to vim.
One of the fun things I learned from one of the Destroy all screencasts is to map ‘,t’ to run your tests from vim.
Instead of using GVim or MacVim, I have been running vi from within iTerm 2/Terminal. Then I map ,t to a command that will run my tests for the current project.
:map ,t :w\|:!rake spec<cr>
Instead of alt+tabbing back and forth between my editor and shell to run my tests. I can now seemlessly switch back and forth from running tests, to writing code all from one environment.
xbuild
For building projects, the Mono equivalent to msbuild is xbuild. It’s super easy to use and works as I expected. On Ubuntu you can install via:
$ sudo apt-get install mono-xbuild
To build your csproj, just jump back into your shell and run
$ xbuild src/test/test.csproj '/target:Clean;Rebuild' /verbosity:quiet /tv:4.0 /nologo
Nuget
I was having some issues trying to figure out how to install packages using NuGet and Mono on both my OSX machine, and Ubuntu machine. Thankfully, I came across this post which helped me finally get things working as expected. nuget on mono
The key to my success was to specify the runtime version. Without it, mono seems to default to the 2.0 runtime, and NuGet uses the 4.0 runtime.
$ mono --runtime=v4.0.30319 NuGet.exe
The NuGet commandline tool can be downloaded from here and the command line reference is available here
unit testing
Machine.Specifications runs just fine under Mono.
annoying
I was surprised at how easy it is to write C# outside of the windows eco system. There are still a few things that are kind of annoying. I find it really annoying to have to manually update the csproj file anytime I add or remove a file. I also miss being able to hit alt+enter and allow ReSharper to automatically include the proper namespace. Although, it has been fun exercising my ability to remember which System namespaces need to be included.
conclusion
I’m having fun with this experiment. ‘nuff said
$ git clone git://github.com/xlgmokha/cs_practice.git