Going from Visual Studio to Rider

MS Visual Studio 2017 to JetBrains Rider 2019.2, to be precise

Jashan Chittesh
15 min readAug 2, 2019

This is Day 1; more days will follow soon.

One thing I hated about Visual Studio and that I love about JetBrains Rider: Visual Studio flattens the packages in the standard Solution Explorer, and doesn’t even show them at all in the Unity Project Explorer. JetBrains Rider, on the other hand, lets me navigate my project exactly the way I want to.

This set of articles is written primarily for Unity developers that currently use Microsoft Visual Studio and consider moving over to JetBrains Rider. It should also be useful for other developers looking for experiences of someone migrating from one IDE to the other. But it obviously includes details that are specific to developing with Unity, and does not compare the IDE’s capabilities / workflows for e.g. Web development.

This first part is a very direct “how I got to try this and what happened” account. I start with a little background that you might want to skip if you are time-pressed. Part 2 will be much more condensed, just outlining the differences I found most important after using JetBrains Rider instead of Visual Studio for a few days.

While writing the article, I ran into a few issues that eventually turned out to not be issues — in those cases, I have added “spoilers” so you don’t have to go down those dead ends with me, if you prefer not to.

And if you are really impatient, here’s the …

… TL;DR

Both IDEs are similar in enough ways to make migration pretty straightforward and I like JetBrains Rider better so far, so:

Go get JetBrains Rider and enjoy an awesome IDE!

Background

I have been using Visual Studio for .NET development for almost 20 years and have enjoyed it a lot. In 2007, I started developing games with Unity — partially because its scripting engine was based on Mono/C# and it could do builds for both Mac and Windows, which mattered to me because I had friends that used Macs. At that time, the Unity Editor was only available on Mac, not on Windows (and I have to say: those first few years on the Mac were the best that I have had with Unity). So, I bought a Mac Pro and moved my primary development environment to it … and ran Visual Studio in a Windows XP VMWare Fusion Virtual Machine, alongside Unity, running natively on the Mac.

I did have to jump through some hoops but it was worth it because Visual Studio was and still is awesome (I guess I should mention that I started using Visual Studio a little while after it sucked, which I have heard it also did, in its earlier history … but .NET really changed a lot about developing in the Microsoft ecosystem, in really good ways, IMHO).

In 2011, I founded narayana games, still as a side project in addition to freelance software-engineering (primarily doing Web applications and database development). One benefit that starting my own company had was that it gave me access to Microsoft’s BizSpark program. That was quite awesome … even though I have to admit that I never really used many of Visual Studio’s Enterprise features. In other words, I didn’t miss much when I moved to the free Community Edition. But still, kudos to Microsoft for supporting startups like that. It was very much appreciated.

Before entering the .NET world, I primarily used Java. After XEmacs and VIM, my primary development environment was Eclipse. Even back then, I briefly came across JetBrains but never got much further than installing an evaluation version and opening a project.

Also, probably 10 or 15 years ago, I once installed JetBrains ReSharper into Visual Studio because some of my colleagues loved it. I hated it and was quite happy when the evaluation period was over and I didn’t need to buy it because … well … it just didn’t impress me much. Keep that in mind because if you like ReSharper (and I understand that most people do), almost all the things I don’t like about Rider won’t even apply to you.

So today, I saw this Tweet:

To be honest, I wasn’t even impressed with the feature that this video was showing. It sure did look useful but it just wasn’t something that I felt I was missing [SPOILER: Within two hours of actually using Rider, I have to say now that I won’t ever want to live without it]. But I wrote a reply or two, and then decided to have a closer look: I checked their Website, features, integration with Unity … pricing:

Oh, organizations have to pay almost three times as much as individuals but I’d rather license it to my little company … but actually I’m not even gonna save taxes if I do because we’re still recovering from spending an insane amount of money on developing Holodance … so … we’re not even paying taxes. So I checked the FAQ, and saw I could call them here in Munich, which I did, which resulted in a very nice conversation. All very cool. And then started downloading not the evaluation version but the 2019.2 Early Access version because hey, it was that tweet about 2019.2 that got me interested.

And while checking for the URL of that Tweet above, I saw that I had received a private message from Kirill Skrygan from JetBrains with a very generous offer: I had mentioned in one of my Tweets that we were tight on funding and now he offered a free one year license.

This is super-cool!

I had already started writing this article and of course I will do my best to avoid bias … but as you can see from my replies on the Tweet that I linked above, I already was a fan of the company.

Which is kind of funny, because I’m just now starting to look more closely at the product.

Why the Company Behind a Product Matters … a lot!

Let me elaborate a little why I think looking at the company before looking at the product is a perfectly valid approach:

As game developers and software-engineers, we need quite a few tools.
Our business literally depends on those tools.
And those tools are created by people.
But we license them from companies or corporations.

Most people are cool. Many companies also are.

Corporations, when there is major funding involved, however, do change.

There are still very awesome people working at Unity, or “Allegorithmic” (the later now actually being “Adobe”, ffs). But especially with Unity, I was fairly close from when they still called themselves “OTEE” (Over The Edge Entertainment), and couldn’t even pay some of the bills of their first Unite (I believe they eventually did pay — but IIRC, it took them a year; poor caterer; David shared that story many years later, in a very noteworthy and heart-warming Unite keynote) … until now that they’re valued at $6 billion.

Don’t get me wrong: Money is awesome! And making lots of money is even more awesome!

And getting VC funding is not even only about the money. With Unity Technologies, as they then called themselves, an important part of the funding rounds probably also was networking with people that would make entering a larger market much easier. So it’s not that I don’t see why people do this.

But I also remember very vividly at one Unite, when they had a PR-person from some other corporation at one of their keynotes. This PR-person wasn’t even from Unity Technologies. She introduced the audience to some collaboration between Unity and some other company, well, corporation. And, me and many of the people I talked to thought that those 20 or so minutes were a complete waste of our time.

There’s nothing like David, Joe or Nicholas talking about what they love (David, Joe and Nicholas were the ones that made Unity awesome by founding OTEE, which then became Unity Technologies).

I still like most all the people I interact with from UT a lot. But nevertheless, I do follow projects like Xenko closely. Bigger is not always better and in my book, capitalism when driven by greed like in our civilization, is cancer and in the middle of destroying our planet. I do my best to stay as distant as I can from that, even if it effects companies that I once dearly loved.

So Valve and JetBrains being privately owned companies without major external funding is major plus for me. I’m just not gonna switch game engines, for now. But I did just switch IDEs.

ELHO JetBrains Rider

Download and installation was quick and easy. There is a little first time startup wizard that lets me set things up “to look kind of like Visual Studio”, which is a big plus.

In one of the steps, Environment, it lets me install two versions of Xamarin (not installed, not interested), and update .NET Core from 2.1.something to 2.2.104, which I did. The progress bar ended and the whole thing stalled for a little while, which was when I started writing this article. It took the first two or three paragraphs to complete and I was a little concerned it may have crashed, but it eventually completed (Unity crashes on me frequently, so I have gotten a little paranoid — but fortunately, Unity usually only crashes on me while closing it, so at least I hardly ever lose much due to those crashes).

And now, finally, I can continue and write little bits and pieces while I go along.

Default Plugins

I have read that there are a lot of Plugins for JetBrains Rider. I use a few in Visual Studio. The default plugins are Web Development, Version Controls, Database Tools, F# Language, Unity Support, Team Foundation Server and Other Tools. Oh, nice, UML, I haven’t kissed you in years.

I’m customizing everything that I think I might use, and disabling everything else. What matters most to me, is Unity Support, obviously. But if you have followed me here on Medium, you hopefully didn’t miss that Web Development is now also on my back again. So some day, I might write more about that side of the fence.

I know, I know: If I accepted funding, I could hire a Web developer that actually enjoys doing Web development. If you want to fund me, privately, buy my games and Unity Asset Store packages (yes, I am Asset Store Publisher 404, and this did cause the trouble one would expect with a number like that on a Website once), or hey, I even have a Patreon that I never really told anyone about (and in fact, I just updated). But the only strings attached I will accept with anyone “funding” me are: Make awesome games. Thanks, I’ll do my best.

Features Plugins

Um, ok. This has things like IdeaVim, Heap Allocations Viewer, Python Community Edition, Ideolog, TeamCity Integration and Rider Xamarin Android Support. I’ll only take Heap Allocations Viewer, even though Ideolog might also be useful. But I already have Baretail ;-)

Getting started with JetBrains Rider

This has a 25-minute overview video, which also links to the Rider Online Help. Yes, I do prefer reading over watching, so that’s much appreciated. It also links to Known Issues. So far, it all looks really good.

But like every developer, I won’t read the manual and then complain later.

jk … the part about complaining later ;-) …

I do sometimes read manuals.

But only when I feel I really have to.

And in general, I feel I shouldn’t have to for using an IDE.

More Tutorials in the Welcome Dialog

There are plenty of tutorials, like Editor Essentials, Run/Debug Configurations, Debugging Basics I and II, Version Control Basics, Get Started with Unit Tests, Rider Tips.Typing Assist.

Hey, wtf, I’m not a noob, kkthx!?

Feedback to JetBrains Rider Devs #1

Ok, so here’s my first feedback to the Rider devs: I appreciate well-meant intentions of the hand-holding but what I, as a former Visual Studio developer would appreciate even more is a question early on that asks something like “Are you experienced with Visual Studio”, or, even better: Check which version of Visual Studio is installed on my system, and give me an option to migrate my settings. I did notice the “import settings” dialog but it wasn’t clear to me what this was for, and I assumed (probably correctly) this was for importing settings from another JetBrains Rider installation.

What I want is: Take all the stuff that I have already set up in Visual Studio, when applicable to Rider, and let me start working.

SPOILER (or TL;DR, if you wish): JetBrains Rider supports EditorConfig which is (almost) all I need. You can probably skip The Settings and Bug Reporting and Known Issues if you want to save a little time. Lesson learned: Leave those Settings alone, just open your damn solution. Because in fact, I ran into one “bug” that only occurs when opening the settings in the welcome dialog — it magically disappears once the project is open. So if you have setup-OCD, stop it right there, you have work to do!

The Settings

I won’t get into the discussion of tabs vs. spaces, or indentation styles. I personally prefer spaces, and the one thing I kept from good-old Java is compact indentation, which that Wikipedia page calls K&R Style in the overview but funny enough, then goes on to show that this is the one I don’t like. Turns out I’m actually a fan of one of K&R’s variants called BSD KNF.

Unfortunately, in this Early Access version, Click an option to see preview doesn’t seem to work, and while BSD/K&R style should be what I want, and that would be extra kudos for Rider for making my favorite the default … I kind of doubt that’s what I’m expecting. See spoiler above: You want get to date that bug when you skip settings until you have a solution open.

Bug Reporting and Known Issues

I tried to find an issue about the bug I had just discovered using various different search strings, the last one being

settings preview does not work code style

… unfortunately, either this isn’t a known issue, or my Google-infected approach of searching for known issues (that happens to work fairly well on GitHub, too) isn’t as competent as I would think, or there simply is no such entry, yet.

Keep in mind I’m trying an early access / beta or even alpha version of Rider. But I don’t really like the bug-reporting system that JetBrains uses, tbh.

Ah, don’t give up — now I tried:

code style preview

… and this gave me a link to:

Preview in Code Style settings doesn’t work for ‘Indent style’ = Tabs

The actual bug entry is actually about another issue but, there is one reply, from October 2018, that describes what I’m seeing in that most recent 2019.2 build:

In Code Style tab too.

JetBrains Rider 2018.2.3
Build #RD-182.4231.496, built on September 13, 2018

Hmpf. Pinging @kskrygan, who immediately passed it on to the team. Very cool.

While I was at it, I also searched for a way to import my code style settings from Visual Studio to Rider, but to no avail. Now I also did read the manual, but that also wasn’t helpful because I read it in the wrong place.

I really want Click an option to see preview to work. [SPOILER: It works when a project is open, it only doesn’t work when opening the Settings from the welcome dialog.]

And then I remembered that Visual Studio uses EditorConfig. So does Rider. But if you read the spoiler above, you already knew that.

Opening my Big Unity Project in Rider for the First Time

Ok, project is open in Unity. Let’s see what happens if I open the solution in Rider. The event log tells me to switch to Unity Editor to load the plugin. I’ll do that later.

Let me first show you something really cool, the only project view I’ll ever need in JetBrains Rider on the left, and two useless project views by Visual Studio in the center and right:

The Solution View of JetBrains Rider totally kills Visual Studios two useless Options

When working with Visual Studio, I usually use Unity to navigate the project, and even that sometimes fails (e.g. clicking on an error in a package file, which even in Unity 2019.1, simply does … nothing). JetBrains Rider apparently uses the actual file structure instead of Unity’s pretty messed up projects. Unity might eventually fix this, but for now, it looks like I’ll have much more fun browsing my project with Rider, even if that “click log message of a file from a package”-Unity bug also effects Rider, i.e. doesn’t work there, either.

After startup, the event log also tells me that Windows Defender might be impacting my build performance (including an option to have Rider fix this, which I did, and it apparently worked, very cool!), and:

Disabled parsing of Unity assets: Due to the size of the project, parsing of Unity scenes, assets and prefabs has been disabled. Usages of C# code in these files will not be detected. Re-enabling can impact initial file processing.

Remember how this all got started on Twitter:

Make sure to read the answers, in particular:

And:

I liked those answers, and I still do. Let me grab my stopwatch and click that lovely link in the log: Turn on anyway

Processing files …

Also, I just saw 357 errors in 9 files. I wonder what that is about. Will investigate later.

Processing files finished after 1:15, so a little over a minute. That wasn’t too bad. Would be nice to have that logged, though. Especially because otherwise, the logging looks really nice and useful.

OH WAIT: It’s still analyzing files. 5182 of 7684. There was one progress bar that completed fairly quickly, but then there’s a little icon that shows things are happening where Unity has the compilation icon. I won’t have an exact time but this will probably be some 5 minutes or so.

This is, btw, on a really beefy PC, with SSD, i9-9900K CPU, 32GB RAM … also a 2080 Ti, which probably isn’t relevant for JetBrains Rider but I thought I should mention why we ran out of funding recently (also, Gamescom 2016 — but that’s another story) ;-)

Well, no, that’s more like 6 or 7 minutes.

I really hope this is smart and will properly handle changes in the Unity project. Usually, I only work on a few scenes and a few prefabs at a time. If the system only updates those as needed, I’m not concerned. [SPOILER: Not being concerned was just right — after working with Rider for a little while, performance (or more precisely, responsiveness), has been awesome and much much much better than what I’m used to from Visual Studio. To be precise, starting up seems a little slow but once Rider is open, going back and forth between Unity and Rider is a pure joy — unlike going back and forth between Unity and Visual Studio, which frequently just stalls, sometimes blocking Unity without showing me the dialog that Visual Studio is waiting for me to dismiss, which can look like Unity crashed when the two actually just don’t cooperate in a decent UX-way.]

Ok, done. After roughly 8 minutes. Also:

480 errors in 56 files.

Whatever that means.

I clicked on it, and am getting “Unexpected Content” for an m_Text-field, probably in one of the demo-scenes that I’m not even ever using. Unity opens those scenes just fine, so it’s a little odd that Rider complains. Here’s one example:

m_LineSpacing: 1
m_Text: 'This demo shows how you can easily use multiple cell types in your scroller.
[...]
in the code is large enough to show a gap between the groups.'
--- !u!222 &1920024505
CanvasRenderer:

Each time I click on 480 errors in 56 files, another scene file opens. But clicking on that icon, I can also open Errors in Solution. Let me show you …

Man, creating screenshots on the Mac was so much more fun than on Windows.

At least I can copy’n’paste screenshots from Snipping Tool right into Medium

Well, doing the “delayed snapshot”-trick lets me give you a little more context:

Let me investigate those 480 errors in 56 files, please!

Inspecting those errors, I’d wager that most of them are false positives. Like “Invalid character” in:

private static readonly Regex UnsafeCharsWindows = new Regex("[^A-Za-z0-9\\_\\-\\.\\:\\,\\/\\@\\\\]");

That \\_ is not liked by Rider. Or, “Parameter value expected”:

[RTP_HideByProp()]

… this is in a Shader. That shader compiles just fine in Unity.

EDIT (2019–08–13): In the released version of Rider (2019.2), all these issues, except the one in the Regex (which I reported very late), are already fixed.

I’m getting quite a few of those. Unfortunately, those are apparently not the 480 errors in 56 files that I’m trying to investigate. Maybe that list only shows shaders and code-files but not Unity assets like scenes and prefabs?

I’ll admit that I have quite a few warnings in Unity because if I tried to keep up with all their deprecations from one version to the next, I wouldn’t get to do any development. But those are all warnings, not errors. Also, a build in Rider completes with no errors — but it does show errors in C# code files.

Either way, I have shared two repro-projects with Vladimir Krasnotsvetov from JetBrains and am confident that they’ll fix these issues.

Speaking of “wouldn’t get to do any development” — it’s dinner-time and I still need to get some stuff done, today. So I’ll keep this as Day 1 and follow up with another part after a few days of working with the IDE.

Summary: My Rider First Impression after Day 1

Definitely looks promising from what I have seen so far and I’m very much looking forward to work with a new IDE for the next few days.

My greatest concern right now is that heavy error and warning overload that I’m getting from Rider. I remember that the massive amount of warnings in a large project was something I found very annoying with ReSharper, and soon switched most of them off (so I might end up in the settings again). More concerning, however, are the errors — but they are already looking into those.

--

--

Jashan Chittesh

Independent Virtual Reality Rhythm Game Developer (using Unity), Founder of narayana games, Meditation Teacher, Lover of Life