static void

Visual Studio 2017 First Look

Published Friday 22 December 2016

We first had a "Visual Studio 15" preview back in March 2016, with a different installer and not much else changed. After several previews, Visual Studio 2017 Release Candidate was released on 16 November 2016. An updated version (not called RC2 or any other sensible version number) was released 12 December 2016.

Installation

We have a nice new menu for installation. With nothing checked, it's a nice 748 Mb. That's deceptive; once you start picking anything, it's always around 5Gb. Click web development, and you suddenly jump to 4.86 Gb. .Net Core and Docker is 4.6 Gb - Core + web development, you're at 5.23 Gb.

VS2017 Installation

There's still no way of skipping VB if you just use C#. In "Individual Components", development tools for 3.5 are unchecked but available.

The installation time wasn't fast- it's hard to say if it was really any faster than previous Visual Studio installations.

VS2017 Installing

In Use

See the release notes

It looks pretty similar. In Solution Explorer, each project has a "Service Capabilities" node at the top. This is apparently the new "Service References" crossed with Azure stuff. If you're not using Azure, there doesn't seem to be a way of hiding it ("Add Service Reference" is still there when you right click "References").

Service Capabilities

I'm using it without resharper (although RS does support the VS RC). Visual Studio is definitely more usable without RS. Intellisense selects with camel-humps (just type the capital letters), and auto-selects by expected type.

"Find All References" now nearly matches RS's "Find Usages"/Shift-F12. The default "Group by" setting is "Project then Definition", which isn't ideal - in the screen-shot 4 of the references are in one class, but they are mixed up with other classes. "Definition, Project then Path" is closer to RS, but too verbose with full paths. There's no match to RS's default view "Project Structure", which is exactly how I want to drill through big result sets.

Find All References - Resharper (left), VS2017 (right)

Ctrl-T "find all" is just like the same RS shortcut. RS is compact but readable, VS2017 tales a second line for each entry. Useable, but not quite as nice.

VS2017 Control-T Resharper Control-T

There are more refactorings, including some common ones from RS (matching file and type name, object initializer).

The unit-testing side has "live unit testing", a background test-runner, like NCrunch. But it's only in Enterprise and doesn't show up in my lowly Community install. Also CodeLens (from VS2013) is still at Enterprise level only, and I really miss that. The CodeLens references links are great, much better than "Find Usages" in Resharper. I also prefer the CodeLens buttons for running unit tests to Resharper.

Under construction

Be prepared for some bugs, it's only a release candidate. I got it into a persistent freeze whenever it tried to open one project (workaround was deleting the .user files). As normal with Microsoft RCs, your best bet is to skip the first one or two. or better still, wait for the RTM.

A "release candidate" implies feature complete, but the Core side is more immature than the rest. This is the first step of the conversion of project.json to project.csproj. It's really a public alpha, and it feels like it, so prepare for some frustration. They released an "update" on 12 December, which is not called "RC2", has big breaking changes, and no automatic upgrade from the original RC.

Upgrading a simple class library with test project created an unusable solution. I did a command line "dotnet restore" and "build" on the class library, which worked after Visual Studio was unable to cope. The test project failed to convert, but again the command line "dotnet migrate" worked. The tests weren't recognized.

The dotnet Core in VS 2017 seems to be too unstable to play with, let alone try to do real work.

Fin

For general development, Visual Studio is catching up with Resharper, but it'll be a few more years before you can really do without it. Dotnet Core is changing fast, and this aspect of the tooling is too flakey to use for now.

Previously: Porting to dotnet Core (19 November 2016)