Anatomy of Code snippets in Visual Studio for Mac

Code snippet is a shortcut that can be used to generate a code from a specific template. Example of a built-in code snippet:

Type cw and double press the Tab key will result in Console.Writeline();

Thats a pretty simple example, however we pressed only 4 keys instead of 19 (ignoring the autocompletion of IntelliSense). In more advanced cases it might be a code snippet to generate a BindableProperty or a simple property in a ViewModel that should notify the binding engine about updates. Sounds like we can increase our performance by letting the code snippets generate boring repetitive code for us.

Visual Studio for Mac is shipped with a default code snippets that can be used as a great example. Let’s take a look on the cw code snippet. First let’s open the editor by clicking on Visual Studio > Preferences > Text Editor > Code Snippets. Now select the cw code snippet under C# group:

Screenshot 2018-11-29 at 00.26.55

#1. Shortcut – is the shortcut we have to type in order to generate the code from the template. In this example it is cw (Console.WriteLine).
#2. Group – there are different available groups including F#, Python and Razor.
#3. Variables – on the screenshot #3 appear twice to demonstrate the definition of the $SystemConsoleWriteLine$ variable and its properties.
#4. Default – stands for the default value of the variable. Please note that in order to avoid confusion we should also provide a namespace.
#5. Function – we can apply built-in functions like GetSimpleTypeName("System#Console.WriteLine"). It will make sure to remove the namespace before Console.WriteLine if using System is already in place otherwise it will use the default value (#4). The list of supported functions can be found here.

The template is just a XML file that live in ~/Library/VisualStudio⁩/{version}/Snippets directory, which means that you can easily import and export code snippets that you create.

Earlier today I created a GitHub repository with a couple of handy code snippets for Visual Studio for Mac and especially for Xamarin. You are welcome to check and contribute by sharing your own code snippets!

Visual Studio for Mac tips & tricks

Switching from old good VS (for Windows) to a new cool VS for Mac can be painful. Original VS was released in 1997 (according to wikipedia) while VS for Mac was released only in 2016. Yes, it is based on XamarinStudio which is built on MonoDevelop but it still has a long way to go in order to be close to it’s ancient relative.

In this article we will take a look on VS for Mac “hidden gems” that can optimize and smooth your workflow. All you have to do is to open Mac’s VS Preferences and read this article on the side.



One of the very basic yet very important settings is the Font. While there is nothing bad using the default font, FiraCode could beautify your code and improve it’s readability by replacing sequences of characters by a single ligature.

The project repository on github contains detailed information on how to install it in your system. It’s also great because this font can be used almost everywhere.

Continue reading “Visual Studio for Mac tips & tricks”

Automatically converting PCL to .NET Standard 2.0 project

Mar-23-2018 01-41-34

Every time you create a new Xamarin.Forms project  in Visual Studio for Mac you have to manually convert it to .NET Standard. The conversion is very straightforward and can be done with just a few steps:


How to Convert a Portable Class Library to .NET Standard and Keep Git History

  • Unload your PCL project (right click -> unload), and start editing it (right -> click edit)
  • Delete Everything in the csproj and insert this:
<Project Sdk="Microsoft.NET.Sdk">

    <!--<PackageReference Include="" Version=""/>-->

  • Add back NuGets (simply open packages.config, and add the package references above, or via the NuGet package manager.
  • Delete AssemblyInfo.cs (this is now in the csproj) and packages.config (also in csproj via PackageReference)
view raw hosted with ❤ by GitHub

Hopefully one day VS team will take care of it, till then, I decided to automate this process and created an add-in/extension for VS for Mac – Mutatio.

Mutatio – in Latin means change, transformation or exchange.

Mutatio can convert newly created or existing projects. Please keep in mind that there might be NuGet packages that does not support .NET Standard 2.0, in this case you may see related exceptions.

In case you change your mind and you want to rollback, Mutatio is making a backup of all the files it modifying and deleting under the project’s root directory within mutatio_backup folder. So all you have to do is to copy the files back to your project and reload the solution.

One of the biggest challenges I met while development was related to reloading the project after conversion. Within VS for Mac after manually modifying the *.csproj under the right click menu of the project there will appear a Reload option, however I didn’t find a way to call this method programatically. Currently, the whole solution will be reloaded as a workaround. If you know how to solve the problem programatically I would really appreciate if you will share your knowledge by contributing or leaving a comment.

More details can be found on GitHub.