SNEK Conference - Tools for .NET Developers

20 March 2014 - .NET, C#, Visual Studio

Next weekend I will be speaker at the SQL Server and .NET Developer Conference (SNEK) in Nürnberg (Germany). One of the talks will be focused on tools for .NET developers. In this blog article I summarize what I am going to show. Here is the (German) abstract of the talk:

Griff in die Trickkiste - Tools, die .NET-Entwicklung erleichtern
Rainer Stropek (MVP, www.software-architects.com)

Nicht nur die Effizienz der entwickelten Software ist wichtig sondern auch die Effizienz von uns Softwareentwicklern während des Entwicklungsprozesses, denn sie bestimmt maßgeblich den Preis und damit unsere Wettbewerbsfähigkeit.

  • wichtige Tools, die in keinem Werkzeuggürtel fehlen dürfen
  • Kniffe und Tricks von Visual Studio 2013, die noch nicht jeder entdeckt hat
  • wie man Performancekillern mit Profiler-Tools auf die Schliche kommt
  • Code-Generatortools in und rund um Visual Studio
  • automatisches Generieren von Dokumentationen
  • Tools zur statischen Codeanalyse
  • und vieles mehr … keine Slides, sondern 100% Demonstration

You can view and/or download my sample code in my GitHub repository.

Getting the Tools with Chocolatey

Are you tired of manually downloading your favorite set of small development tools? Turns out that most of them are already on chocolatey. Chocolatey is like NuGet but for applications. You should definitively give it a try.

Visual Studio

The most important tool for .NET developers is - of course - Microsoft Visual Studio. Knowing it well means becoming more productive. During the SNEK session I will demo different IDE features of Visual Studio that can help mastering everyday work as a developer. I picked two topics that I will place a special focus on:

  1. Data-tier Applications
  2. Microsoft Fakes (Shims and Stubs)

One focus of the Visual Studio 2013-related part of the talk will be new features of the lastest version:

  1. Cloud integration with Visual Studio online
    1. TFS in the cloud
    2. New Git integration
    3. Build in the cloud
    4. Sneak peek into what's coming: Visual Studio Online "Monaco"
  2. Editor enhancements like
    1. Code Lenses
    2. Peek Definition, and
    3. XAML IntelliSense

Important Visual Studio Extensions

Microsoft regularly published productivity enhancements for Visual Studio in their Productivity Power Tools addon. You can find the latest version compatible with Visual Studio 2013 in the Visual Studio Gallery. The website also contains a detailed description of what the power tools will add to VS. Take a look at it and decide whether you want to have these extensions. At SNEK I will not demo the power tools live.

If you are planning to customize your Team Foundation Server, be sure to install TFS 2013 Power Tools. They make configuring TFS much simpler. TFS customizing is not a relevant topic for most SNEK attendees. Therefore I will not cover this topic there.

Visual Studio Alternatives and Editors

In my opinion, Visual Studio is one of the best IDEs of the world. However, some people prefer to use free tools. It turns out that there are some free alternatives:

  1. Visual Studio Express Editions - free with reduced feature set but still very useful if you have a limited budget.
  2. SharpDevelop

Sometimes all you need is a good editor. A full IDE would be too much. Which editor a developer uses is nearly a religious question. I personally use Notepad++ beside Visual Studio. If you try it, make sure you already check out Notepad++'s great plugins.

NuGet

NuGet has become the primary development vehicle for libraries. Even new parts of .NET's Base Class Library (BCL) are only shipped via NuGet anymore. If you have not become familiar with NuGet already, it is time to start. At SNEK I will show some tools that can help with NuGet:

  1. NuGet Package Explorer - tool for exploring and building NuGet packages interactively.
  2. Website http://www.nuget.org/ - the number one place to look for libraries and/or to publish libraries that should be available to everybody. You can also get NuGet.exe from there. This tool enables you to automate the creation of NuGet packages.
  3. Website http://www.myget.org/ - very useful if you want to publish your libraries to a closed group of users. MyGet saves you from having to run your own NuGet server. You can easily set up password-protected, private feeds and grant e.g. only your customers access to it.

Coding Best Practices

Observing best and avoiding worst practices for C# is easier said than done. Which practices are important for you? Do you know all of them? Why are they relevant? Microsoft and 3rd party providers offer a set of tools that can help you with best and worst practices. During the session I will demo the following tools:

  1. StyleCop - analyzes C# source code to enforce a set of style and consistency rules.
  2. Code Analysis - warns you in case of violations of the programming and design rules set forth in the Microsoft .NET Framework Design Guidelines.

Code Generation and Refactoring Tools

What's better than writing code efficiently? Not having to write it at all. Tools that can generate code for you can help with that. During my SNEK session I will talk about the following tools:

  1. T4 - Microsoft's templating engine integrated in Visual Studio (if you plan to use T4 more, you should check out tangible's T4 editor).
  2. GhostDoc - generates rundimentary C# code documentation.
  3. Visual Studio IntelliSense and automatic code generation
  4. Example for commercial tool: JetBrains' ReSharper

Debugging and Profiling Tools

There is no way to 100% avoid bugs. Debuggers are used to hunt down functional bugs. Profilers are used to find code fragments with poor performance or memory leaks. At SNEK I will talk about the following tools (and demonstrate some of them depending on the time I have):

  1. Less known but very useful Visual Studio debugging features (e.g. data tips, make object ID, viewing return values in the Autos window, mixed mode debugging, etc.).
  2. WinDbg - a low-level debugger that can help in environments where you cannot install Visual Studio or in mixed-mode scenarios (native code/managed code).
  3. Fiddler - a web debugger that can help you debugging multi-tier applications with web services.
  4. WireShark - a tool which lets you analyze network traffic. In contrast to Fiddler, WireShark can analyze any kind of network traffic, including SQL Server's TDS protocol.
  5. Snoop - a free WPF spy utility (consider XAMLSpy if you prefer a commercial WPF spy utility).
  6. PerfView - a free, low-level profiler from Microsoft that can also be used in production environments. Be prepared: PerfView is very powerful but not easy to use.
  7. Example for commercial tool: Red-Gate ANTS Profiler.

One essential toolset I will not show at SNEK because of time limits are the sysinternals tools. They are indispensible when hunting for bugs on stubborn computers.

Documentation Tools

Documentation is an important part of software. Sometimes you need to document an API for a reusable class library, sometimes you have to create documentation for end users. Here are some tools that can help you creating professional documentation:

  1. Sandcastle Help File Builder (aka SHFB) - used to create help files for managed class libraries containing both conceptual and API reference topics.
  2. Greenshot - a great free tool for creating screenshots. Very useful for everyday work even when not creating a documentation.
  3. Example for commercial tool: SnagIt and Camtasia from TechSmith - great tools for creating screenshots and screen videos.

If you create images for documentation, you will probably need to edit them. Here are my favorite free tools for that. I am not going to demo them in my SNEK talk. However, here are the links:

  1. Gimp (bitmap-based) and
  2. Inkscape (vector-based) - image manipulation and drawing programs.

Tools for Organizing Your Work

Efficient programmers do not only have technical tools. They also have tools for organizing their work and time. Here is the tool chain that we have been successfully using for years. I will describe our way of working in my SNEK talk, too. Of course all tools are SaaS tools. We avoid having to setup and run our own server infrastructure.

  1. Make use of the power of TFS to structure your work into work packages (e.g. backlog items, tasks, bugs, etc.).
  2. For managing our agile development workflow the Kanban-way, we prefer Jira over TFS. We especially love Jira Agile (aka GreenHopper) and its ability to being customizable even when running in the cloud. However, we have written some internal tools to sync Jira and TFS.
  3. Great support makes happy customers. Managing support cases in our inbox or in an Excel sheet is definitively not enough. We have learned to love Zendesk. It integrates nicely with Jira and allows to tranform support cases into bugs whenever necessary.
  4. Last but not least - of course - we use our own product time cockpit for time tracking, planning, and invoicing. By default, time cockpit integrates with Outlook and TFS. It is quite simple to setup some scripts to integrate time cockpit with Zendesk and/or Jira to enable booking times on tickets.

Various Other Tools

There is a myriade of tools for developers available on the internet. I decided to add here some of the tools that I personally like and use. Hope you find them useful. First let us start with the tools that I am going to show at SNEK:

  1. LINQPad - lets you query databases, OData web services, and other data sources using LINQ, C#'s query language. My second talk at SNEK will be about OData. I will demo LINQPad in this talk.
  2. Example for a commercial tool: Reflector - If you wonder what's going on in the background, it is sometimes useful to decompile .NET's intermediate language. With this you could e.g. find out how C# async/await is implemented. Reflector is a great tool for getting C# code from IL.

Secondly, here are some additional tools that I am not going to show at SNEK because of time restrictions:

  1. Sizer - small tool that lets you resize windows so you can test your application for different window/screen sizes.
  2. There are many different diffing and merging tools on the web. I personally use WinMerge.
  3. As a developer you are typically subscribed to dozens of services and personalized websites. You end up having countless credentials. In practice, you either use the same credentials everywhere (highly unrecommended because very unsafe) or you have to use a password manager. I have been using KeePass for years.
  4. Need to store or transfer sensitive production data? Consider using a TrueCrypt encrypted disk for that.
  5. If you are a heavy user of remote connections, you could try Royal TS instead of Microsoft's terminal services client.
  6. Solid State Disks (SSDs) are a great tool for speeding up your development environment. However, they have one problem: They are rather small and expensive. Therefore disk space could be an issue. My most important tool for keeping track of my disk space is WinDirStat. With this tool you will easily find unnecessary large files and/or folders.
  7. In times where DevOps is becoming more and more popular, developers become admins and admins become developers to a certain extent. Therefore developers sometimes need a powerful scripting environment. Windows brings its own solution: PowerShell. If you are a .NET developer and you don't want to learn a new language for scripting, you could give ScriptCS a try.