Introducing Rider, the New .NET IDE webinar: recording and Q&A

The recording of our recent webinar with Matt Ellis, Introducing Rider, the new .NET IDE from JetBrains, is now available:

In this webinar, Matt shows how to get up and running with Rider, and quickly get it working with your .NET Framework and .NET Core projects. He looks at the features that are familiar to ReSharper users, with code completion, inspections and quick fixes, testing and NuGet. He also shows what the IntelliJ platform brings to the party, including version control, debugging and database tools. And all of this on a Mac.

Questions and Answers

There were some popular questions asked during the webinar, as well as those that we didn’t get the chance to answer on the day.

Q: What can you say about the integration with Unity?

A: Basically Unity support is there: you can edit, run and debug Unity applications, attach to Unity process etc. There’s a featured Unity plugin that works with Rider and ReSharper, which contains Unity-specific generation and coding assistance features. There’s also a plugin that integrates Rider into the Unity editor. We’ll take a more in depth look at Unity support in a blog post that is coming soon.

Q: Will Rider have a coverage tool for Unity editor unit test tool?
A: It’s not decided yet whether we’ll add coverage tools in near future for Unity or for any other frameworks.

Q: Are you planning to add Xamarin Support?
A: Yes. You can already open and edit Xamarin solutions. You can’t run or debug them now but we’ll be working on that.

Q: Any plans to support visual design aspects for Xamarin solutions?
A: Yes, we’re investigating this as well. No time estimates so far but rest assured we’re looking at this.

Q: Are you also developing a GUI designer like in Visual Studio for WinForms, WPF etc?
A: Yes, we’re looking at how we can support at least previewing WinForms/WPF/Xamarin Forms. We’re not sure we’re going to make it for the first release though.

Q: Any news on licensing yet? Part of All Products licence?
A: Rider is definitely going to be a part of All Products subscription. Pricing is not defined but will most probably end up somewhere between ReSharper and IntelliJ IDEA price tags. More details to be decided and announced.

Q: Can you setup a custom font in Rider?
A: Absolutely: see File | Settings | Editor | Colors and fonts | Font. Support for fonts with ligatures is there as well. You can even install custom IDE themes although this is a bit more complicated.

Q: Will we be able to run a UWP project in Rider v1?
A: We probably won’t be able to support UWP in v1; in a longer run, we’ll certainly look at this.

Q: Any support for ReSharper Code Cleanup profiles to format code according to predefined layout? Is it possible to import from existing ReSharper settings?
A: Rider should actually read your per-solution ReSharper settings by default. UI for code style settings and Code Cleanup is coming.

Q: Are ReSharper plugins supported by Rider? Is there any place I read about requirements to make plugins compatible with Rider?
A: If a ReSharper plugin doesn’t contain any UI, Rider can reuse it. We’ll be working on documentation and SDK to make ReSharper plugins available in Rider. Right now, it’s pretty much a manual and undocumented process.

Q: Is there a way to sync my IDE settings between Windows and Mac?
A: Yes. Right now if you’re using ReSharper, save your settings to solution-wide layer with “Save to”. This will create a .sln.dotSettings file, which Rider will respect on Windows and Mac. If you’re not using ReSharper and only using Rider, you’ll probably have to wait until we implement UI for settings management in Rider. We’re working on that.

Q: Will you support SonarLint?
A: In principle, you can even use IntelliJ’s SonarLint plugin with Rider as it’s marked as compatible (we have never tried it though, so unsure if there are issues). However you may not need a lot of that as Rider provides ReSharper’s 2000+ code inspections, including inspections for JavaScript, TypeScript etc.

Q: Does Rider support F# as well or is it a planned feature?
A: Rider doesn’t support F# at this point. We are considering adding F# support in future as it’s a top-voted feature request.

Q: Will other JetBrains .NET tools eventually be available with Rider? (dotTrace, dotCover, dotMemory, etc…)
A: We’re hoping to make them available in some form at some point in future but this is complicated because dotTrace and dotMemory both use a lot of Windows-specific UI. Not something we’re working on in the scope of v1. However, dotPeek’s decompiler engine is available in Rider as well as in ReSharper.

Q: How do I create a live template, such as a NUnit test snippet?
A: Live template editor isn’t implemented yet but will be available at a later time. Current workaround: create a template in Visual Studio + ReSharper, save it to solution-wide .dotSettings file, and Rider will pick it up.

Q: How far are we from v1 release?
A: We expect to release in 2017, probably in Q2.

Q: How will you track with changes happening in VS 2017? Will Rider updates be kept in sync with ReSharper updates?
A: Yes, we’re going to reuse changes introduced in ReSharper updates. Some of them (inspections, context actions) come to Rider “for free”; others require additional effort. As to Visual Studio 2017, if Microsoft introduces something that we don’t have, we’ll consider how and whether to implement anything similar.

Q: Are structural navigation and “smart cursor movement” (when you press dot inside parenthesis, focus is moved outside of expression) in your plans? Really hard to switch to Rider from Visual Studio + ReSharper without that feature :(
A: Structural navigation and typing assists that you’re referring to both require additional efforts to port to Rider, so these will be available later.

Q: Will there be diagrams as in IntelliJ IDEA or layer diagrams?
A: This is not planned in the scope of v1.

Q: Is it possible to share naming conventions between team members (share on a network drive, URL, …)?
A: It will be possible. Right now, if you’re using ReSharper in Visual Studio, save a team-shared solution settings file, and Rider will use it.

Q: Can Rider navigate to .NET source code (instead of decompilation)? Does Rider uses public symbols?
A: Yes it can. It doesn’t decompile library code if it can pull source from Microsoft Reference Source Center: same as ReSharper and dotPeek.

Q: Will Rider eventually substitute all your add-ons for VS?
A: No. Rider will reuse new features introduced in ReSharper but Rider and ReSharper will co-exist: if you’re fine with Visual Studio, you’ll have ReSharper available; if you’re eager to switch IDEs, there’s Rider for you.

Q: Is Rider compatible with Visual Studio 2008 projects and solutions?
A: Yes, you should be available to load, edit, run and debug these projects on Windows.

Q: Some more information on debugger? Same as within Visual Studio?
A: A different implementation. We’re targeting feature parity with Visual Studio by the time of v1. Just My Code and Edit and Continue are currently two missing pieces. (GPU and native debugging are out of scope though.)

Q: Will there be an integration for ClearCase?
A: There are ClearCase plugins available for the IntelliJ platform, but they’re not currently marked (or tested) as compatible with Rider. If there’s demand, we’ll try to make them compatible.

Q: What framework is Rider written in?
A: Rider is written in a custom framework that implements a fast and efficient protocol to be able to transfer data between the backend (ReSharper) and the frontend (IntelliJ IDEA), and guarantees data consistency.

Q: How soon will Rider support .NET Core 1.1 and MSBuild based .csproj files?
A: We hope to provide support for these technologies in upcoming EAP builds, most probably before end of this year.

Q: Does Rider support running on both .NET framework AND Mono on Windows? Or is Windows .NET Framework only?
A: Mono on Windows should work as well.

Q: Does Rider support any obfuscation solutions?
A: We haven’t looked in this direction yet.

Q: What is the expected timeline for having multiple projects open simultaneously?
A: Definitely before v1. Hopefully before end of this year. This feature has a very high priority.

Q: Any plans on supporting the JavaScript tools (e.g. Angular) available in the IntelliJ platform?
A: Yes. We’ll be integrating a lot of WebStorm features into Rider soon, including Angular support.

Q: Will there be Community and Ultimate editions similar to IntelliJ IDEA, or a single edition like WebStorm and RubyMine?
A: We’re targeting one edition.

Posted in How-To's | Tagged , , | 8 Comments

JetBrains Rider Early Access Program is now public

Back in January, we announced Project Rider. In March, we started the private Early Access Program. Today, we’re very excited to announce that the Rider EAP is now open to everyone!

Rider splash screen

We’ve had some fantastic feedback during the private EAP, and Rider is now well on the way to release. While we’re not quite feature complete, and there are still a couple of rough edges, we know of many people, inside and outside of JetBrains, who are already using Rider for day-to-day development. We’d love you to try it for yourself and let us know what you think, good as well as bad – log an issue, leave us a comment or ping us on Twitter (@JetBrainsRider).

TL;DR:

Download the first public Rider EAP build.

And here’s the Rider home page, the issue tracker and please read the survival guide for various known issues and workarounds. There is also a webinar on November 23rd which will demonstrate Rider in action.

But let’s back up for a moment.

What’s Rider?

Rider is a full featured, cross platform .NET IDE based on ReSharper and IntelliJ. The front end and user interface is built on the proven IntelliJ platform, just like WebStorm or IntelliJ IDEA, and can run on Windows, Linux and Mac. But the engine that drives all of your favourite JetBrains IDE features is ReSharper, running as an out of process language server.

This is a great mixture. Both IntelliJ and ReSharper provide industry leading IDE functionality, and running ReSharper out of process frees us from sharing resources and memory with Visual Studio.

Rider

Features

So what’s in the Rider public EAP?

Rider is using ReSharper to provide language features, and our main goal has been to expose as much of this ReSharper functionality as we can for 1.0. And we’ve been building ReSharper for over 12 years, so that’s a lot.

Fortunately, the way Rider works means that a huge amount of functionality can be brought over very quickly. Rider already supports ReSharper’s rich navigation and find usages; automatic, smart and import completion; the vast majority of ReSharper’s over 2,200 inspections and over 1,000 context actions and quick fixes; as well as unit testing, solution wide analysis and more.

Code completion popup

But of course, Rider is an IDE, and needs to implement full IDE functionality, including features that ReSharper doesn’t provide, so we also build and debug as well as handle project management – solutions, references, NuGet, and so on.

In fact, there are almost too many features to easily list, so instead, let’s take a look at a couple of different scenarios we’re targeting – .NET Framework, .NET Core, and Xamarin and Unity.

.NET developer

Rider will load standard .NET Framework or Mono projects. It understands Visual Studio .sln files, and will load any MSBuild based project (e.g. .csproj).

And because we now own the solution load process, you’ll find that it’s fast. Even better, if you edit a project file externally, Rider will quickly and automatically reload, almost without you noticing.

References are of course supported by right-clicking on the project in the Solution Explorer. Or you can use our new NuGet window to search, install and update your NuGet packages. Traditionally, this functionality is provided by Visual Studio, so it’s nice to be able to provide a typically JetBrains implementation – we cache results and update in the background, and we think you’ll be very pleased with the speed of it.

NuGet tool window

And of course Rider supports build, run and debug. Projects are built with MSBuild or XBuild if you’re running cross platform with Mono, while run and debug make use of a powerful feature of IntelliJ – Run/Debug Configurations (ReSharper has a similar feature).

Run configurations allow specifying as many different ways of launching your project as you need, and Rider offers a number of .NET specific templates for launching projects, running arbitrary executables, .NET Core and so on.

Furthermore, Rider supports debugging run configurations. This includes .NET Framework, Mono and .NET Core. Rider uses IntelliJ’s existing debugger UI, offering a familiar call stack view, as well as locals and watch variables. Rider also supports break on exception and setting the next instruction.

Debug configuration dialog open with debugger running

No IDE is complete without support for unit testing, and Rider supports running and debugging xUnit.net and NUnit tests, with a familiar user interface – icons displayed in the editor, run or debug from the Alt+Enter menu, and a tree view of running tests. Double click a test to navigate to the code, and of course, the stack traces are clickable, too.

Unit test icon in the editor

And if you’re worried about switching to a new IDE, don’t be! Our getting started wizard will walk you through setting up Rider, including choosing keymaps that are familiar to Visual Studio and ReSharper users, and suggesting plugins to work better with your code.

Keymaps getting started page

.NET Core developer

Rider also supports .NET Core projects. It can open existing projects from the project.json file, or create new ones based on templates from the new project wizard.

New project dialog

And of course, this is all cross platform. If you want to target .NET Core on Mac, or Linux, you obviously want your tooling to be there, too. Rider will give you a full IDE on Windows, Mac and Linux.

When you open a .NET Core project, Rider will automatically restore all NuGet packages, and shows packages as a dependency tree, rather than a flat list. Once loaded, Rider provides the same rich IDE functionality as you get with a traditional .NET Framework project – code completion, navigation, refactorings, inspections and so on.

Adding a reference is as simple as editing the project.json file (with code completion, naturally) and saving; Rider will restore the packages automatically. You can swap between multiple target frameworks with a chooser in the status bar.

Target framework switcher

It also includes specific functionality for ASP.NET Core, such as Tag Helpers in .cshtml files, with code completion, find usages, and refactoring all supported.

CSHTML tag helper completion

And of course, Rider will build, run and debug your .NET Core projects, all cross platform. But please read the survival guide for known issues with adding references, debugging and unit testing.

And finally, Rider has inherited ReSharper’s ability to run and debug .NET Core unit tests. Well, mostly. This feature is not quite finished, and doesn’t work in all cases – for example, non-Windows projects that also target the .NET Framework. But it currently supports xUnit.net and NUnit, and will also support projects that target multiple frameworks. Again, please check out the survival guide.

Test runner

Unity and Xamarin developers

While we’ve mostly been focused on exposing existing ReSharper functionality, and adding new, essential IDE level features such as debugging, we also want to make Rider a great IDE for developing Unity3D and Xamarin solutions.

We haven’t really got started on Xamarin support right now, although Rider already includes ReSharper’s existing Xamarin.Forms XAML editing features, with more planned.

But we’re a bit further along with Unity support. Firstly, the Unity editor can be made to open projects, C# files and error messages in Rider by adding the Unity3dRider plugin to your Unity project (this will hopefully be built into Unity in the future). See the readme in the repo for instructions on getting this set up. We’ll blog more about this very soon.

Then, once a project is open in Rider, you’ll find that there is specific Unity functionality, too. We’re bundling the ReSharper Unity plugin (yes, Rider supports plugins!), which adds a number of useful features, such as automatically setting the supported C# language level (no more C# 6 suggestions in your C# 4 code!) and inserting and auto completion of Unity message methods. See the plugin’s readme on GitHub for more details.

Auto completing Unity message methods

Furthermore, Rider will also debug your Unity project. The Run → Attach to local process menu item will show a list of available processes to debug, including available Unity instances.

Attach to Unity process to debug

We’ll write more about Unity support in a future blog post.

IntelliJ features

As if all this wasn’t enough, Rider inherits a number of very cool features from IntelliJ, too. Features such as the REST test client, rich version control support, and the often life saving local history.

Rider also includes DataGrip’s rich database tooling. This means you can open a .sql file and get smart code completion, on-the-fly analysis and quick-fixes across a huge range of databases – MySQL, PostgreSQL, SQL Server, Oracle, and loads more. You can run queries, examine results and even refactor your database.

Rider showing database tooling

And that’s not mentioning access to IntelliJ’s rich plugin ecosystem. While the plugin SDK is still under development, Rider already supports both IntelliJ and ReSharper plugins, so Rider can take advantage of existing IntelliJ plugins such as VIM editing mode. Check out the currently available plugins for Rider on our plugin repository site.

Check out Hadi’s Rider Tips and Tricks video from NDC Sydney for more examples of how the IntelliJ platform will help you using Rider.

Why should you use Rider?

Hopefully, you can see that we’ve made Rider a fully fledged IDE, utilising the years of experience and functionality we’ve built into IntelliJ and ReSharper. For a pre-1.0 product, it’s already got an enormous amount of functionality.

We’re aiming to build the best IDE experience for .NET development. We want Rider to be feature rich, and we want it to be fast. And by owning the entire IDE stack, we can deliver on this, and innovate in areas that we haven’t looked at before, such as significantly improving the experience of searching in NuGet.

But the simplest answer is to download it, and try it for yourself – see how well it works for your own solutions and projects.

And remember, Rider is built from the ReSharper codebase – Rider IS ReSharper. New features and fixes in one product will flow into the other. Above all, we’re offering you a choice – if Rider works well for you, cross platform or on Windows, then great! But if you prefer Visual Studio, then rest assured, ReSharper will always be there to help you.

Oh, and one last thing. You might have noticed that we started this journey with the codename “Project Rider”, and were planning on an official name later. Well, it’s now later, and honestly, we like the name Rider. So that’s what it’s going to be – welcome to JetBrains Rider.

Download the first public Rider EAP build from the web site, or fire up Toolbox: Rider’s going to be there as well.

Posted in News and Events | Tagged , , , | 86 Comments

Live Webinar: Introducing Rider, the new .NET IDE from JetBrains, November 23

Join us Wednesday, November 23d, 15:00 – 16:00 GMT (11:00 AM – 12:00 PM EDT) for our free live webinar, Introducing Rider, the new .NET IDE from JetBrains, with Matt Ellis.

rider_webinar_introducing_rider_the_new_net_ide_from_jetbrains

Rider is a new cross platform .NET IDE, built on the IntelliJ platform and ReSharper. But don’t worry about life outside of Visual Studio. We’re here to help and guide you through this brave new world.

In this webinar, we’ll show you how to get up and running with Rider, and quickly get working with your .NET Framework and .NET Core projects. We’ll take a look at the features you’ll be used to from ReSharper, with code completion, inspections and quick fixes, testing and NuGet. We’ll also look at what the IntelliJ platform brings to the party, such as version control, debugging and database tools. We’ll even look at how we can work with Unity projects. And all of this on a Mac.

Space is limited, please register now.

About the presenter:

Matt EllisMatt Ellis is a Developer Advocate at JetBrains. He has spent 20 years shipping software and currently works with language tooling, having fun with abstract syntax trees and source code analysis. He owns and contributes to various open source projects, and believes in the open closed principle.

Posted in News and Events | Tagged , , | 1 Comment

What if this method were faster? Forecasting performance with dotTrace

When profiling and analyzing performance of an application, we sometimes ask ourselves questions like, “What if this method were faster?”, “What would be the performance gain if we made this specific call 50% more efficient?”, and “Is it worth doing?”

One way to tell that would be to optimize that method and profile the application again – a time-consuming task that could involve changing the program structure without knowing if it makes sense to do so. The other option would be to ask dotTrace to reduce the method’s execution time and then recalculate function timings “as if” that method were optimized. Continue reading

Posted in dotTrace Tips&Tricks, How-To's | Tagged , , | 4 Comments

ReSharper Ultimate build for Visual Studio 2017 RC

Microsoft has just announced its latest IDE preview release, and we’re here to sim-ship a compatible version of ReSharper Ultimate.

Just get ReSharper Ultimate 2016.3 EAP 9 and install it into Visual Studio 2017 RC. You should be able to install all tools that are included in ReSharper Ultimate, namely ReSharper, ReSharper C++, dotCover, dotTrace and dotMemory.

Granted, both the new Visual Studio and the ReSharper EAP are pre-release products, so issues are to be expected here and there.

Please try installing the EAP build in Visual Studio 2017 RC and let us know how it works for you.

Posted in How-To's | Tagged , , , , , | 29 Comments

ReSharper Ultimate 2016.3 EAP 8

ReSharper Ultimate 2016.3 EAP 8 is here. In this build, we fixed another bunch of issues and added a few new features.

ReSharper

External stack traces open automatically

Stack Trace Explorer now lets you open external stack traces even faster – if you copy a stack trace that contains symbols from the currently opened solution and then switch focus to Visual Studio, ReSharper will automatically load it to the Stack Trace Explorer without the need of pressing any shortcuts. This behavior is configurable on the Tools | Stack Trace Explorer options page.

Decompiling directly from nuget.org

Assembly Explorer (ReSharper | Windows | Assembly Explorer) adds a new way of loading assemblies – directly from nuget.org or from any NuGet package source:

Opening assemblies from NuGet package source

By the way, this feature has been also available in recent versions of dotPeek.

Further development of TypeScript features

  • The Encapsulate Field refactoring, which helps you quickly create a property for a field and optionally replace usages of the filed, now works in TypeScript.
  • Optimized memory usage for TypeScript caches.

Formatter improvements

  • Indenting of nested for, foreach, while, lock statements is now disabled by default, with options to restore the old behavior.
  • New option for indenting type parameter constraints.
  • Fixes for bugs introduced in 2016.2 by the new indenting engine.

ReSharper C++

This EAP build brings support for nested namespace definitions introduced in C++17.

C#-style XML documentation comments are sometimes used for C++ symbols. Now they are correctly displayed in the Quick Documentation pop-up (Ctrl+Shift+F1) and in the quick info tooltip:
XML documentation in C++ pop-ups

Download ReSharper Ultimate 2016.3 EAP

Please feel free to download the latest ReSharper Ultimate 2016.3 EAP build.

If you come across any problems with this build, please let us know in issue trackers of ReSharper and ReSharper C++.

Posted in News and Events | Tagged , , , | 8 Comments

ReSharper Ultimate 2016.3 EAP 7

Another build of ReSharper Ultimate 2016.3 EAP is out. Build number 7 fixes dozens of issues and brings a set of new and improved features.

ReSharper

New code generation actions for C# and VB.NET

The Generate menu (Alt+Insert in a class) gets 3 new actions:

  • Relational members helps you automatically overload relational opeartors (>, <, , ) and/or implement IComparable and IComparable<T> using selected fields and properties. Optionally, you can choose from several string comparison algorithms and generate nullability checks.
  • Relational comparer creates a comparer class derived from Comparer<T> using selected fields and properties. In addition to choosing a string comparison algorithm and generating nullability checks, you can opt for generating a static property that will expose the comparer class to consumers.
  • Dispose pattern helps you generate the canonical implementation of IDisposable with optional nullability checks and destructor for unmanaged members.

All the new generation actions work both in C# and VB.NET. Even better, actions that help you implement IDisposable and IComparable<T> are also available with Alt+Enter on highlighted code:
A quik-fix that helps implement a dispose pattern for IDisposable

Usage search goes async

The updated usage search mechanism makes finding references of heavily used symbols easier in two ways:

  • The Show in Find Results button becomes available in the pop up as soon as you invoke Usages of Symbol (Shift+Alt+F12). So if you see that the the search for usages is going to take some time, you can just click this button or press + on the numeric keypad and go on working with the code while the search continues in the Find Results window.
    Opening Find Results from 'Go to Usage'
  • The Find Results window now works asynchronously too, meaning that you can work with the resuls tree while usages search is still in progress.

Improved support of C# 7.0 and VB.NET 14

  • Deeper analysis of C# local functions enables a lot of code inspections in their context, such as 'possible null reference exception', 'access to disposed closure', and 'access to modified closure'.
  • ReSharper now respects the new #Disable Warning/#Enable Warning directives in VB.NET.

Support of UWP RelativePanel control

ReSharper now correctly resolves element name references, detecs binding errors, and provides code completion for the RelativePanel control in Windows 10 Universal apps.

Code completion in RelativePanel control

ReSharper C++

  • The postfix completion that we announced in EAP 6 now also works after ->.
  • New options for C++ formatter: 'Spaces wihin parentheses in cast expressions' and 'Place enumerators on new line'.

dotTrace

In addition to multiple performance improvements, dotTrace also delivers a number of new features in this build.

Call Stack improvements

Call Stack Before 2016.3
Call Stack After
The Call Stack tool window in dotTrace Timeline gets a whole bunch of enhancements in 2016.3. This window consists of two sections: Top Methods for displaying methods with the highest execution time and Call Tree for digging into the call tree. Each of the sections gets improved in this release:

  • We returned the Show system functions option that was helpful when analyzing methods’ own execution time. If you select this option, system calls are shown separately in the Top Methods list and user methods don't include their time. Otherwise, user method’s own time includes the own time of child system calls.
  • The Top Methods list now shows not only methods’ own time but total time as well (total time includes the execution time of the entire call subtree).
  • Moreover, now you can click on a method’s own or total time in Top Methods or Call Tree. This will apply a filter by a corresponding method (if you clicked on the own time link) or by a method and its subtree (if you clicked on the total time link).
  • The Top Methods list now follows your selection in Call Tree. When you select a particular method in Call Tree, Top Methods is rebuild to show you only child calls of the selected method.
    Call Stack. Follow selection

Download ReSharper Ultimate 2016.3 EAP

As ever, we welcome you to download the latest ReSharper Ultimate 2016.3 EAP build.

If you spot any problems with this build, please do report them to issue trackers of affected products: ReSharper, ReSharper C++, dotTrace.

Posted in News and Events | Tagged , , , , | 10 Comments

ReSharper Ultimate 2016.3 EAP 6

ReSharper Ultimate 2016.3 EAP 6 is now available to download. Let’s take a look at what’s in this latest build.

dotTrace

EAP 4 introduced support for profiling .NET Core applications, and now you can profile .NET Core unit tests directly from ReSharper’s test runner. You’ll note that currently, dotTrace hasn’t yet added folding or subsystem definitions for the xUnit.net or .NET Core modules, which can make it a little harder to read, but don’t worry, we’re working on this.

dotTrace showing test results

As before, there are certain restrictions – this is Windows only, right now, and targets the CoreCLR, not Mono. It also only supports Sampling mode. However, we previously suggested setting the  COMPLUS_ReadyToRun environment variable. This is no longer necessary – dotTrace will do this for you.

Next up, the Timeline view in dotTrace now supports capturing native allocations. This is enabled in the Advanced view when Timeline is selected.

dotTrace native allocation option

Once enabled, dotTrace will capture events whenever there is a native allocation. Note that this has an overhead, and can have a noticeable impact on the application being profiled.

After profiling is complete, and the data is analysed, dotTrace will add a new filter of “Native Memory Allocations”. When selected, this will filter down to only the events which caused native memory allocations, selecting the time slices on the main Timeline view, and filtering the Call Stack top methods to the methods that were making the allocations.

dotTrace native allocation results

We’ve also added a new Events tool window that aggregates file, HTTP, SQL or exception events that have taken place during the currently selected set of time slices. This is similar to the filters of the same name, but is designed to allow examination of the events, rather than to use them as the filter. Selecting an event will give details of the event, including timestamp, duration and call stack.

dotTrace Events tool window

ReSharper

This build sees initial support for C# 7.0’s pattern matching in  is expressions and  switch cases. This is just the start, and more support is of course coming in future builds.

The JavaScript language injections that we introduced in the last build get a little more polished, as we fix Rename and Find Usages, and syntax highlighting should work more reliably, too.

Our tool for speeding up your solution build timeReSharper Build, is also getting a bit of an update in this EAP.

Firstly, the results of a build are now displayed in their own Build Results window, which will list build warnings and errors. Toolbar buttons allow hiding warnings, displaying a preview of the code with the error, and exporting the results to a file.

You get a lot of control over how you want to see the results, too. You can show them as a flat list, or enable grouping, to show by a mixture of project, folder and file. Or you can use ReSharper’s semantic knowledge of the file to group by namespace, type and member.

Build results tool window

The options are currently being reworked, as well. For example, you can choose when the Build Results window is shown – always, never, only when there are errors, or when there are warnings or errors. We’ve also split the heuristics lists into their own page, and added a NuGet restore log page, to capture output from NuGet restore activities.

The other interesting new option is to log the build to either the Output window, or a file. You get to choose what kinds of messages are output – errors, warnings, messages and standard console output – and of course, the location of the log file.

ReSharper Build options

And ReSharper Build now gets its own implementation of NuGet restore. Previously, we would use Visual Studio’s NuGet integration to perform the restore, but this only worked in Visual Studio 2015. We’ve rewritten this so it now works for all Visual Studio versions. The new NuGet options page allows capturing and viewing log information for restores.

ReSharper C++

The “Third Party Code” options page is proving popular! Introduced for JavaScript and TypeScript in EAP 4, updated to include CSS in EAP 5, and EAP 6 now adds C++ support. Just to recap – this page allows adding files, folders and wildcards to be treated either as “skipped” or “library”. ReSharper will completely ignore “skipped” files, and treat “library” files as read-only – indexed for navigation, but no inspections or quick fixes.

And finally, ReSharper C++ gets a form of postfix completion that is very much like C# extension methods. If you “dot” an expression, ReSharper C++ will now suggest free functions that would accept that expression as the first parameter. When you accept the suggestion, ReSharper C++ will rewrite your code so that the expression is passed as the first argument.

C++ postfix completion

Please download the EAP and give it a go! As ever, if you encounter any issues, please let us know.

Posted in How-To's | Tagged , , , , | 12 Comments

Navigate to text in a solution with Go to Text in ReSharper

Navigating within a solution is easy with ReSharper. Hitting Ctrl+T lets us navigate to types, symbols and files in our solution. In ReSharper Ultimate 2016.2 we added another navigation, Go to Text, which makes navigation to text in source and textual files much easier than using Visual Studio’s Find in Files. And much faster, too!

Now why add another navigation when we already have things like Find Usages, Go to Everything, Go to Implementation and so on? Not everything is code. Very often a solution may contain pure string references, like error messages emitted to the user. Comments may have issue numbers from a bug tracker in them. We may want to find a specific string value throughout our code base. Or search where a regular expression is used. Using Go to Text we can navigate to those very easily, whether the results are in source files, configuration, JSON or elsewhere.

Press Ctrl+T 3 times or use the ReSharper | Navigate | Go to Text menu to bring up the navigation pop-up. After typing (part of) the text to search, we can use the arrow keys to navigate through the list of results.

Using Go to Text to find a connection string throughout codebase

The nice thing is Go to Text searches in both source files and other known file types. In the above example, that makes it really easy to search where a specific setting is being used, whether in code, configuration files or elsewhere.

Just as with other navigation types in ReSharper, we can select an item from the list of results and press Enter (or click the item) to navigate there directly. We can also use the Show in Find results (+ on the numeric keypad) to display the list of results in a separate window.

Go to Text show results in separate window

Go to Text will remember the last 10 searches we navigated to. This makes it easy to repeat searches without having to type them again.

Repeat searches in Go to Text

A nice touch is auto-paste from selection and from clipboard. We can select text in the editor and then press Ctrl+T 3 times to immediately start searching for that selection.

Select text and invoke Go to Text to search for selection

By default, Go to Text searches in all source files and in any .bat, .ps1, .md, .txt, .sql, .rb, .php, .py, .java, .jsp, .kt, .ini or .fx file. Want to exclude files and folders? In ReSharper’s options, find the Environment | Search & Navigation page and add them under Elements to skip.

The Go to Text navigation is bundled with ReSharper Ultimate 2016.2. For earlier versions, head over to the extension manager and install the Go to Word extension with similar functionality.

Do give it a try and let us hear your feedback through the comments below!

Posted in How-To's, ReSharper Tips&Tricks | Tagged , , | 8 Comments

ReSharper Ultimate 2016.3 EAP 5

We have recently published yet another build of ReSharper 2016.3 EAP, and let’s now look what’s inside.

ReSharper

In mainline ReSharper, there is a number of fixed issues and some new features:

Dynamic completion of package names

In project configuration files (project.json, package.json, and bower.json), ReSharper can now suggest available package names based on your input:

Dynamic completion of package names

Language injections

In the first build of 2016.3 EAP, we added support for CSS and JSON as embedded languages, and now we’re adding support for JavaScript. This means that ReSharper will be able to parse the contents of a string literal, and treat it like a JavaScript snippet – with syntax highlighting, code completion, inspections, quick-fixes and so on.

As before, this can be enabled using a specially formatted comment –  //language=javascript – which means the marker and the injected language will be shared across the team. If you don’t wish to modify the file, you can also use Alt+Enter and the “Mark as” submenu, which stores a tracking marker in ReSharper’s caches, but mind that the marker is local to your machine only:

Marking string literal as JavaScript

ReSharper also automatically injects languages in certain known scenarios, such as injecting JavaScript into AngularJS templates, or CSS in jQuery’s  $[] indexer. For C# code, it will also automatically inject based on usage of the  HtmlElementAttributes and  HtmlAttributeValue annotation attributes.

This build also includes a new options page for language injections, allowing you to selectively enable or disable built-in automatic injections:

Automatic Language Injection options page

ReSharper C++

Among other fixes in ReSharper C++, this EAP build fixes the problem of user output from tests in Boost 1.62 and improves performance of the Boost.Test runner.

dotMemory

dotMemory now checks your application on finalized objects and objects queued for finalization. A new Finalizable objects inspection on the overview page shows such objects sorted by their type.

dotMemory Finalizable Objects Inspection

There are two problems in having finalized objects:

  • The finalization thread is run unpredictably, which, first, may cause problems in case you want to reclaim the unmanaged resources as quickly as possible, and, second, may lead to sudden performance drops.
  • The lifetime of finalizable objects is extended by at least one more garbage collection cycle (when garbage collector reaches such objects, it first promotes them to the next generation).

Therefore, it is more effective to implement the IDisposable interface for these objects. In this case, you reduce objects’ lifetime and explicitly run all disposal routines via the Dispose() method.

dotPeek

dotPeek introduces new ways to explore metadata of .NET assemblies – in addition to displaying and searching for metadata tokens, you can now dig through all metadata items (tables, blobs, strings, etc.) in the Metadata node that appears under each assembly. Noticeable features of this node include:

  • Automatically finding and displaying usages of metadata table items.
  • Decoding and displaying values of blob items.
  • On double-click, decompiling and displaying code that corresponds to the metadata item.
  • Exploring PE file headers.

Metadata tree in dotPeek

Download

If you haven’t done so yet, please download the latest 2016.3 EAP build and give it a try. As usual, we welcome your feedback via issue trackers of the corresponding products: ReSharper, ReSharper C++, dotMemory, and dotPeek.

Posted in How-To's | Tagged , , , , , | 3 Comments