Posts Tagged ‘ReSharper’

Inline Parameter Refactoring in ReSharper 8

Friday, June 14th, 2013

Recent ReSharper 8 EAP builds introduce a new refactoring for C# (VB.NET support is currently in the works) whereby we can refactor a parameter passed to a method to be replaced with actual value being passed in.

Before applying Inline Parameter refactoring

Invoking Inline Parameter refactoring on the argument 400 in the above screenshot causes the value parameter in the AddTen method to be removed, with all instances of its use replaced by the literal 400:

After applying Inline Parameter refactoring

The above is easy because the exact value to substitute is known. But that same refactoring can be invoked from the method parameter:

ReSharper 8 Inline Method Parameter

In this situation, the refactoring locates all the instances where the parameter is given a value. All you have to do is pick the instance that you want to use, and the parameter will be correspondingly inlined:

ReSharper 8 Inline Parameter Choose Usage Dialog

If the first usage from the above is chosen, the following changes will occur:

  • The original Solve method loses the last parameter, all its uses updated by the constant 16:

  • All methods that previously used this parameter no longer use it:
    ReSharper 8 inline parameter result

Finally, there are situations where a parameter that you wish to be inlined depends on local variables or other calculations the cannot be extracted. For example:

ReSharper 8 Inline Parameter Lambda Sample

Invoking Inline Parameter on the action parameter presents a dialog warning that while this is inlined, an additional parameter will be created:

ReSharper 8 Inline Parameter Choose Usage Replacement

Then, there is another dialog, which asks you if you want to include the new argument (in this case, work) in the method:

ReSharper 8 Inline Refactoring Inline Parameter Options Dialog

And, finally, the magic happens and the whole lambda gets transplanted into DoSomething(), with the usage updated appropriately:

ReSharper 8 Inline Parameter with Lambda End Result

This feature is already in the latest EAP, so if you want to see it today, you know what to do. Enjoy!

Architecture Tools in ReSharper 8

Thursday, June 13th, 2013

Like many people with very large Visual Studio projects, we in the ReSharper team wanted to get an overview of the 300+ project dependencies for ReSharper itself. Unfortunately, VS Ultimate gave us a representation that was rather difficult to interpret:

ReSharper 8 solution in VS Ultimate Architecture View

What we ended up doing is building our own tool for viewing project dependencies as well as comparing architectural snapshots as the solution continues to change and evolve.

Here’s how it works. First of all, with your solution open, go to ReSharper|Architecture|Build Architecture Graph:

Architecture Explorer Menu Item

ReSharper then goes through your solution and, without compiling anything, presents a dependency diagram of all the projects in the solution:

ReSharper Project Dependency Diagram

The great thing about the way R# does it is the fact that layout is calculated automatically to present an optimal illustration of dependencies between elements. ReSharper builds the dependency graph, and if the Show Code Metrics option is on (it is on by default) then reference analysis happens asynchronously — ReSharper analyzes the whole solution and indicates the strength of coupling between projects. This all happens on the background thread, so you can continue editing code, navigating etc. while ReSharper does its work.

There are two arrows linking the projects: black arrows show project references wheras grey arrows show unused references that can be safely removed without breaking the build.

The architecture diagram gets rendered for the scope you’ve selected in Solution Explorer: if you select just a folder with several projects, only those projects will be included. However, there is always a way to fine-tune which projects are represented by checking the appropriate boxes:

Architecture explorer view check boxes

Ticking each of the boxes shows or hides the appropriate elements on the diagram. This allows us to instantly update the representation of connections between different subsystems as soon as they are checked or unchecked in the list on the left.

The toolbar shown above has several options for how information is presented on the graph. First of all, there are several ways of grouping information:

Architecture view grouping options

The above options are None (meaning no grouping is done), Solution folders for grouping by solution folder, and File structure for groupings based on actual directory structure and the projects’ position therein.

The following toolbar buttons are also available:

  • Collapse Graph and Expand Graph buttons let you collapse or expand an area where a grouping is used. A collapsed group looks simply like this:
    Architecture view collapsed group
    As an alternative, one can simply double-click the + or - button on the group to expand or collapse it.

  • The Show/Hide Code Metrics button lets you show and hide metrics associated with the code. These metrics show used and unused references (black and grey arrows respectively) and also show the number of references from one project to another:
    Architecture view with metrics

    You can also select the indicator, right-click it and use Show Usages… to find out where these referencing calls actually occur.

  • Show Transitive References shows not only direct references but actually all transit references, so in addition to showing A → B → C, it will also show A → C on the diagram. This can lead to a very rich, circuit-like representation:
    Architecture view with transitive references

  • Save Architecture Graph lets you save the graph to a file.

  • Show Diff shows you a difference between two architecture graphs. In fact, you can also invoke this function (even without having a solution open) from the top-level menu:
    Open saved graph and diff menu

The ability to save architecture graphs to a file allows the user to look at the difference between the architectural layout of the solution as it continues to evolve. The following illustrates the changes that have been made to a solution:

Architecure tools diff illustration

The above is an illustration of the evolution in one of ReSharper’s subsystems. Red boxes indicate parts that have been removed, whereas dark green ones indicate new parts that have been added. The same color scheme is also applied to references.

Lastly, keep in mind that project-level menus which can be invoked in Solution Explorer can be invoked on Architecture View nodes in the same manner:

As always, we hope that you find this feature useful — it is already in the latest EAP, so if you want to see it today, you know what to do. Keep in mind that this is a very fresh tool that we’ve built, and one that we’ll be sure to augment with additional architecture-related features in future releases.

.NET Tools Team at NDC Oslo: 2 Workshops, 2 Talks and Booth

Monday, June 10th, 2013

June 10 - 14, Hadi Hariri, Maarten Balliauw and Matt Ellis will be participating in NDC Oslo 2013; Norway’s largest conference dedicated to .NET and Agile development.

The guys will be leading a total of four workshops and talks in addition to staffing our booth. We invite you to come by and learn what’s new in the latest EAPs of ReSharper 8, dotTrace 5.5 and dotCover 2.5 and share your thoughts on these planned releases and other JetBrains tools.

JetBrains Technical Evangelists

Mark your calendar and join us for the following workshops and talks:

Continuous Integration and Delivery Workshop - Hadi Hariri and Paul Stack - June 10th

In this workshop we’re going to deal with the implementation details. We’ll see how to set up projects, distinguish types of tests, deal with triggering and branching, configure dependencies to improve maintainability, work with outputs, deal with failures, as well as manage and run deployment pipelines. This will be a workshop about putting the concepts into practice and seeing where things work, where they don’t. Learn more.

ReSharper Workshop - Hadi Hariri - June 11th

In this full day workshop, we’re going to refresh your knowledge about mainstream ReSharper functionality, and learn about many of the overlooked features of ReSharper. Beyond the simple navigation, we’ll learn how to effectively navigate legacy codebases using advanced navigation features, inspections, usage search, and value⁄call tracking. We’ll learn about using some of the less known yet very useful automatic refactorings that ReSharper offers. Learn more.

Brewing Beer with Windows Azure - Maarten Balliauw - June 12th, 16:20 - 17:20

Inspired by one of the Windows Azure gods (Wade Wegner), Maarten decided to order a homebrewing starter kit. Being a total cloud fanboy, he decided to hook those delicious creations to the cloud. Join Maarten and discover how you can connect a USB temperature sensor to Windows Azure to monitor brewing and fermentation temperatures. He’ll show you how to do distributed, social brewing in this fun yet practical session on an interesting use case for the cloud: beer.

Being an Anti-Social Geek is Harmful - Hadi Hariri - June 13th, 13:40 - 14:40

My 20+ years experience in software development has shown me one thing if not anything else: lack of good communication can kill a team, can kill a product and can kill a company. Having dealt with hundreds of developers, managed many teams and started my own company, I have seen how team moral can be killed when communication is hindered. I have seen how products can fail when customers are ignored. Developers need to learn how to be social. Learn more.

We look forward to meeting you in Oslo!

 

ReSharper Personal and Academic Licensing Changes

Monday, June 3rd, 2013

Last year, we asked for your input in order to decide whether to make a transition to upgrade subscription-based licensing for ReSharper. Upon reading through your feedback and undertaking internal research, we introduced a commercial license including 1-year upgrade subscription.

Further on we thought that it would be appropriate to do something similar for personal and academic licenses. What we did was just drop the traditional, per-major-version personal and academic licenses and replace them with licenses empowered with 1-year subscription. This is exactly how most of our products (such as PhpStorm, RubyMine, AppCode or WebStorm) are licensed: when buying a license, you can upgrade to any major and minor releases during 1 year.

Starting June 1, whenever you buy a new personal or academic license or upgrade your existing one, you get 1 year of free upgrades, effectively meaning that you receive the upcoming ReSharper 8 for free.

Unlike the commercial license that can be purchased both with or without 1-year upgrade subscription, personal and academic licenses default to the subscription model, and do so without price increase. As a result, if you’re a personal or academic customer, there’s no more pain of buying a license and finding out in several months that you need to pay again in order to get the latest update.

ReSharper 8 EAP Build: JIT Edition

Thursday, May 30th, 2013

Well it’s here. With only one day left for the previous EAP to expire, we’ve managed to get a new EAP build. All is fine. Download the latest EAP now. Let’s see what’s in store in this build.

Move Instance Method Refactoring

This frequently requested refactoring allows moving instance methods from one class to another. Take the sample class below:

Before applying Move Instance Method refactoring

We can see that the Print method uses an instance field. Invoking an Move Instance Method refactoring on this method results in ReSharper prompting us for the destination class we want to move the method to. However, in addition to moving the method, it also wraps the field, in this case with a property, and passes in the current class as an argument to the method, resulting in

After applying Move Instance Method refactoring

Note that when it comes to choosing destination classes, this refactoring only offers those that are members of the original class. It’s also worth pointing out that Move Instance Method currently only supports C# but we’re working to ensure VB.NET support in subsequent builds.

Inspecting XAML Grids

We’ve added several new code inspections and quick-fixes related to the usage of grids in XAML markup. Although present in one of the previous EAP’s we’ve now polished it up for the current release and ready to talk about it some more.

With ReSharper 8, there’s no way you can declare a control that sits in a non-existent grid row or column and get away with it:

ReSharper detects a usage of an undefined row

What we have here is a parent grid with two defined rows and a nested grid referencing a grid row that doesn’t exist. In addition to helping you actually spot the problem, ReSharper 8 includes a quick-fix that will insert all the missing row definitions if that’s the way you want to sort out the issue:

Quick-fix to add missing row definitions

It adds the missing definitions without moving the caret around, and you stay exactly where you had been before the fix was applied. If you’re working with a complex layout and you stand at a grid row property that’s several screens away from row definitions, that saves you quite a bit of navigating through your code.

There’s also a new inspection that fires up whenever a control within a grid doesn’t specify a row or column number, and suggests a fix. Note that this inspection isn’t fired for the first control in a grid since developers often deliberately leave columns and rows for the first controls unspecified.

Quick-fix to add a missing grid row property value

We’re not only adding code inspections and corresponding quick-fixes but standalone context actions as well. Specifically, there are new context actions to add or remove a row or column definition before or after the current definition, as well as one to remove the current row or column definition.

ReSharper can help if you want to add or remove a column definition

XAML Refactorings

We have added a whole bunch of refactoring and enhancements for XAML, including Extract Style Refactoring, collapsing empty tags, code cleanup, styling daemons, and more. We’ll be covering these in more detail in a separate blog post.

UI Enhancements, Bug Fixes and More

Some touch-ups have been applied to the ReSharper UI where most of the older controls are now replaced with WPF ones. We’ve also fixed numerous bug reported since the previous EAP (thanks everyone for these reports and keep them coming). Additionally, two somewhat annoying bugs have also been fixed with this release, related to MSBuild. The first one is Conditional References with MSBuild and the second has to do with ResolveAssemblyReferencesDependsOn build task.

We hope you enjoy this latest release of ReSharper 8 EAP and as always, welcome bug reports and feedback. Download the latest EAP now.

ReSharper 8 EAP: NuGet based Extension Manager

Friday, May 10th, 2013

ReSharper has always had a powerful extensibility story – its Open API allows plugins to use the same APIs that the core product uses. But distribution – discovery, installing and uninstalling – has previously been left to the plugin author, meaning the user is left with an experience ranging from msi installers to zip and batch files. Recently, .NET has seen the success of the NuGet package manager, which makes it very easy to install, uninstall and update libraries in a project. We’d like to bring that ease of use and discovery to ReSharper, which is why we’re very happy to be taking the wraps off our NuGet based Extension Manager.

ReSharper Extension Manager window

The latest EAP build of ReSharper 8 adds support for extensions to be distributed as NuGet packages. You get to use a very familiar interface to browse and install extension packages from our new extensions gallery. Of course, you can easily uninstall and update, too, and ReSharper will check for updates for you, and notify you when a new build is available – perfect for keeping up to date with EAP changes.

ReSharper update notification balloon tooltip

Speaking of EAP changes – since ReSharper 8 is currently still under development, it is obviously changing and evolving with each EAP release. Which means our packages are marked as “prerelease”. Once 8.0 is released, these will of course become Stable. Until then, please make sure to select “Include Prerelease” when browsing with the Extension Manager, or in the Gallery.

Extensions, Not Plugins

A very important change, though, is that an extension is not just for plugins. An extension can also be used to distribute ReSharper’s settings files and External Annotations, meaning you can now write useful extensions without even having to write any code.

The benefit of distributing .dotSettings files is that these are the files used by ReSharper to store Live Templates, Structural Search and Replace patterns, and other settings. For example, the xUnit.net test runner extension includes a plugin to provide the test runner capabilities, but also includes a .dotSettings file, adding lots of Live Templates to help generate code to write asserts faster.

Live Templates imported by the xUnit.net extension

And the sample patterns catalog extension adds a sample set of Structural Search and Replace patterns. These patterns are a very powerful, declarative way of analysing code and applying the standard warning squiggly underline highlight. What’s more, they can also provide a declarative means for creating a quick-fix for this code – adding an action to the alt+enter quick-fix menu to replace the code. See here for an introduction to SSR, and check out these posts for more information.

Structural Search and Replace dialog with sample patterns imported

Of course, settings files aren’t limited to Live Templates and SSR patterns. While these were the primary motivation for adding support for .dotSettings files, it opens the door for more interesting extensions – defining code formatting standards, code cleanup profiles, extra To-do items, or even a different set of opinionated code inspection defaults (don’t like our default “var” recommendations? Change them!).

Extension packages take advantage of ReSharper’s settings layers. If the extension contains a .dotSettings file, it is added as a read-only layer. The settings in the file are merged with the other layers in your installation (This Computer, Solution and project files – see this post for more information on layers), and naturally appear in the Options dialog or Live Templates Explorer. This means you can edit the templates, patterns or other settings, and any changes are then saved in the This Computer layer.

If you don’t want these extra settings (for example, you want the test runner, but not the included Live Templates) you can easily remove them from the system by disabling the layer in the Manage Options dialog. The settings, templates or patterns are immediately removed.

ReSharper's Manage Options dialog showing xunitcontrib settings layer deselected

External Annotations are xml files that contain a map between ReSharper’s annotation attributes, and pre-compiled assemblies. ReSharper’s code analysis uses these annotations to make better decisions about the warnings to show. For example, without annotations, this test code warns about potential null usage, even though the preceding Assert will throw an exception if the value is null – in other words, the value is guaranteed to be not-null when accessed.

ReSharper warns of potential null reference exception, even though the line will never be hit due to preceding Not Null assert

The xUnit.net extension adds annotations for the xunit.dll assembly, which tells ReSharper that Assert.Null will throw if the passed parameter is null. Now, ReSharper knows that the second assert will never get hit, and marks it as unreachable.

ReSharper highlights unreachable code due to preceding assert

ReSharper ships with annotations for the BCL, and some annotations for third party assemblies, notably to enable INotifyPropertyChanged support. Extensions can now distribute annotations for other third party assemblies.

Dependencies

Since extensions are NuGet packages, they can have dependencies. Someone could write an extension that exports a Live Template for creating test methods. That template could use a macro from another extension to make sure the method name you type gets converted to a valid name – changing spaces to underscores, for example.

Bundled Extensions

Another exciting benefit we get from the extension manager is the ability to have bundled, or pre-installed, extensions. These are simply extensions that are installed for you as part of the normal installation process. Once installed, they behave just like normal extensions, and we can push updates to the Gallery at any time, allowing us to update these plugins on a separate schedule to ReSharper itself.

In the latest EAP build, we’re bundling our NuGet plugin which uses NuGet to add package references, rather than file references when importing types. We now get the best of both worlds – this really useful functionality is included by default for every ReSharper user, and we have the flexibility to update it at any time, decoupled from ReSharper’s release schedule.

Custom sources

Of course, since this is based on NuGet, we get to take advantage of the existing infrastructure and tooling available in the NuGet community. Our Gallery is based on the NuGet Gallery sources, and is the default, primary location for getting extensions (remember to select “Include Prerelease”!). But you can also use the Extension Manager page in the Options dialog to specify extra sources – local or remote file system or a custom NuGet feed, such as TeamCity or MyGet. This makes it easy to install private, company wide extensions that target your specific needs, or nightly builds of an extension you build, or perhaps create a curated feed of your favourites.

custom_sources

How to Build Your Own Extensions

Building extensions is very straightforward. While we’re based on NuGet, we have a very different purpose to NuGet – extensibility information as opposed to assembly references. So we don’t use the standard libs, tools or content folders. Instead, we have our own folder structure that makes more sense for the data we need to distribute in the package. But that’s really the only difference. We still use the .nuspec file for metadata, and we pack and push the .nupkg file to the ReSharper Gallery in the same way – sign up for an account, get an API key and push away! You can get more information on creating an extension package at the ReSharper 8 devguide site, and if you have more questions, please email us at resharper-plugins@jetbrains.com, or send a message to the new resharper-plugins Google Group.

Please note that the Extension Manager relies on NuGet’s core library to implement a lot of its functionality. Since this is a .NET 4 library, the Extension Manager is limited to Visual Studio 2010 and 2012. We’re looking at ways to improve this as we progress through the EAP.

We hope you enjoy the changes we’ve introduced around extensions. Please try it out and let us know your feedback. We’re still quite early on in the EAP cycle, so expect changes – but if there’s something you want to see changed or updated, let us know! You can report issues at our YouTrack instance.

And remember, you don’t need to write a plugin to release an extension – let’s see some Live Templates and SSR patterns!

New Features in the Latest ReSharper 8 EAP

Tuesday, April 30th, 2013

Good news everyone — we’ve got another EAP build ready and it should come as no surprise that we’ve got a few new features to talk about. So without further ado, here’s what we’ve got in store for you today.

Extension Manager or how to provide xUnit.net support

We sometimes get requests to provide certain features out of the box, functionality that is currently provided via plugins. xUnit.net support is one of these.

While doing this certainly has its benefits, it also has disadvantages. As such, we decided instead to take the opportunity to address the core problem, which is to simplify the discovery, installation and updating of ReSharper plugins.

We’re very pleased to introduce our NuGet based Extension Manager. It’s now very easy to add extensions and plugins to ReSharper, all from a user interface you’re very familiar with from NuGet. Simply open the Extension Manager from the ReSharper menu, and you’ll be able to browse and search for extensions from the “Online” category - make sure you select “Include Prerelease” in the drop down first - these are still EAP packages!

So to get xUnit.net test support, simply find the xunitcontrib package and hit Install.

That’s all there is to it! ReSharper now has support for running xUnit.net tests, and includes Live Templates and External Annotations to make your test code writing experience better.

We’ll be taking a more in-depth look at this feature very soon, but one important point to make right now is that because NuGet is a .NET4 library, the Extension Manager is only available in Visual Studio 2012 and 2010.

ToString() Format Completion

ReSharper already has a few features related to String.Format() usage, such as for example inspections and fixes related to format arguments being used in the format string. However, in this EAP we’re taking it a bit further by adding code completion for types which have well-known format specifiers (such as DateTime, TimeSpan, Guid, enumerations and many others):

Multi-File Templates

By popular demand, ReSharper’s support for file templates has been expanded to incorporate the possibility of creating several files from a single template. You start, as always, by creating a single file template. But then, ReSharper gives you controls to add additional files: you can either add a new file or a file from an existing template:

Choosing one of these options adds another editor into the template editor window. In this editor, you can specify the placement of the file (either a relative location or an ASP.NET code-behind file), the name of the folder to place the file into, and of course the name of the file. Then, just edit this template as you would any other — you can reuse the parameters you declared for the first template.

You can add as many files as you want and once you come to fire the template, all the necessary files (and folders, if they do not exist) will be automatically created in the right places.

Go To Generic Subsitutions

When you have the usage of a generic type such as List<Foo>, it’s easy enough to find all usages of List<T>, but what if you want to know the exact types that List<T> is being specialized with. To help with this, one of the new navigation options is to look for Generic Substitutions:

Once you fire up this navigation item, ReSharper will search for all the types that are used to substitute the generic parameter T and will show you a summary tree grouped by the type used to substitute the generic parameter. You can drill down into the tree to find out the exact locations where a particular type is used:

Blue Theme Support

Visual Studio 2012 Update 2 has been released with support for a Blue Theme, and we’ve made adjustments to ensure that ReSharper plays nice with it too:

We’ve got a lot more in store, and we’ll be blogging in the coming weeks about new features as well as giving in-depth overviews of the ones we’ve already mentioned. Meanwhile, please feel free to check out the EAP and let us know what you think!

Refactoring Legacy Code Bases, Free Online Event May 8

Wednesday, April 17th, 2013

In cooperation with Microsoft, join JetBrains’ Hadi Hariri for the free online event, Refactoring Legacy Code Bases using Microsoft Visual Studio and ReSharper. The session is intended for architects, designers and professional developers.

Refactoring Legacy Code Bases
Wednesday, May 8, 9:00 AM - 10:00 AM Pacific Time (GMT-08:00)

Not everyone has the possibility of working on Greenfield projects or doing TDD or BDD. Many of us often end up having to work with legacy code bases that have little notion of what SOLID design principles are and unit tests are non-existent. It can be daunting to have to maintain these types of systems. However, with a little bit of effort, we can try and make the best of the situation. We can combine some well-known refactoring techniques, along with code analysis and design concepts to improve the quality of the code.

Registration is required to attend. We hope to see you there!

ReSharper’s Web Path Mapping Explained

Monday, April 15th, 2013

One of the many scenarios that ReSharper seeks to address in web projects is a situation where the locations of files during the design of the app are different from the locations where the app gets deployed. This makes life difficult for ReSharper, since it doesn’t know where to go looking for the relevant files. Luckily, the Path Mapping feature lets you configure the locations of those paths.

There are two mechanisms that can both be used to configure path mappings – context actions and explicitly opening the Path Mapping dialog.

When ReSharper sees a path that it doesn’t recognize, it will underline the path with a wavy line, complaining that it doesn’t know where the path is. At this point, pressing Alt+Enter will show you several options for how the situation can be handled:

The first option, Ignore path, simply tells ReSharper to not bother inspecting this particular path wherever it may appear. This is useful in situations where, for example, you are referencing a file that doesn’t yet exist, and might be created later.

The second option is to Set path mapping, i.e. define explicitly how the path is handled.

Once again, there are two options: Substitute replaces a path with a different path, whereas Ignore chooses to ignore the path and is functionally equivalent to the Ignore path context action.

The Path mapping dialog box doesn’t only show up when you use a context action: you can also open it up by selecting the Path mapping element of the properties of the web project you’re working with. Note that we’re talking about the property grid (F4) rather than the tabbed property pages. To bring up the dialog, just press the button next to Path mapping.

Incidentally, the text value next to the button can be one of two possible options – either Custom indicating that some mappings have already been created, or Not set when none have yet been defined. At any rate, just as with the context action, pressing the button brings up the Path mapping window where you can create, delete and change mappings:

We hope you find this feature of ReSharper useful and your experience of developing web applications becomes a little more enjoyable. Develop with pleasure!

ReSharper 7.1.3 is Available for Visual Studio 2012 Update 2

Friday, April 12th, 2013

Have you upgraded Visual Studio 2012 to Update 2 RTM? If you have, please download ReSharper 7.1.3, which is mostly about compatibility with this new Visual Studio update.

Specifically, ReSharper can now successfully run MSTest fixtures in VS2012 Update 2 (this was the most important problem that has prevented usage of ReSharper 7.1.2 with VS2012 Update 2); adds support for Windows Phone 8 unit test projects; and becomes compatible with the final release of LightSwitch HTML Client as part of VS2012 Update 2.

To make things clearer, here are some easy rules specifying whether you need ReSharper 7.1.3 depending on the version of Visual Studio that you’re using:

  • Visual Studio 2005, 2008, or 2010: you don’t need ReSharper 7.1.3, skipping this update is a safe bet.
  • Visual Studio 2012 prior to Update 2: you should NOT install ReSharper 7.1.3 if you’re using MSTest.
  • Visual Studio 2012 Update 2: ReSharper 7.1.3 is primarily for you, so go ahead and download it.