Friday, August 21, 2015

Visual Studio 2015–Enable NuGet Package Restore is gone

Yesterday when creating a new solution in Visual Studio 2015, I noticed that the ‘Enable NuGet Package Restore’ option had disappeared from the solution context menu. Bedroefde emoticon Whooops! What happened?


On StackOverflow I found that Microsoft has dropped support for the 'Enable NuGet Package Restore' in VS2015. Starting from NuGet 2.7 the way NuGet Package Restore works has changed. By default the NuGet Visual Studio extension integrates into Visual Studio's build events and restores missing packages when a build begins.

More information can be found in the NuGet documentation.

Thursday, August 20, 2015

What defines a successful Scrum Master?

Over the years I worked with a lot of teams in different roles; as a developer, architect, tech lead, and so on…  Sometimes we were successful, sometimes we failed. With Agile becoming mainstream, the role of the Scrum Master is one extra role to add to the list.

But as a Scrum Master, how do you know you are doing a great job? Different organizations are in different stages of an Agile transformation, teams are different, business is different,… Still there is a common ground and a set of practices that can help you succeed as a Scrum Master.

Vasco Duarte wrote a great article about these practices useful for everyone in a Scrum Master role today.

From the article:

In order to help Scrum Masters create their own approach we have collected many different views in the Scrum Master Toolbox podcast and have collected some of them here for you to read and refer to in the future. Below you will find a list of 15 tools and approaches that Scrum Masters all over the world use.  Experienced Scrum Masters explain how they define and measure their own personal success as Scrum Masters, and share their lessons learned about how to achieve success. From how to deal with stakeholders, to how to improve your coaching skills, to how to help the team achieve a sustainable pace. The lessons shared below come from many years of experience and will help you improve your performance as a Scrum Master.

We’ve also added a few caveats and warnings that you must take into account. The goal: help you succeed as a Scrum Master.

Go check it out!

Wednesday, August 19, 2015

Team Foundation Server 2015–New build agents–Installation issue

Yesterday I talked about the new agent based build system introduced in TFS 2015. I mentioned how easy it was to install them, … until you get into trouble. Today I encountered an issue when rolling out an agent on existing server. When I invoked the ConfigureAgent.ps1 script, it failed with the following message:

PS C:\build> .\ConfigureAgent.ps1
Unblocking files
The term 'Unblock-File' is not recognized as the name of a cmdlet, function, script file, or operable program. Check th
e spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\build\ConfigureAgent.ps1:12 char:52
+ Get-ChildItem -Path $currentLocation | Unblock-File <<<<  | out-null
    + CategoryInfo          : ObjectNotFound: (Unblock-File:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

The term 'Unblock-File' is not recognized as the name of a cmdlet, function, script file, or operable program. Check th
e spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\build\ConfigureAgent.ps1:13 char:67
+ Get-ChildItem -Recurse -Path $currentLocation\Agent | Unblock-File <<<<  | out-null
    + CategoryInfo          : ObjectNotFound: (Unblock-File:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Cannot find an overload for "Combine" and the argument count: "3".
At C:\build\ConfigureAgent.ps1:15 char:43
+ $agentLocation = [System.IO.Path]::Combine <<<< ($currentLocation, 'agent', 'vsoAgent.exe')
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

Write-Error : File not found:
At C:\build\ConfigureAgent.ps1:19 char:16
+     Write-Error <<<<  "File not found: $agentLocation"
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Microsoft.PowerShell.Commands.WriteErr

When I invoked the $PSVersionTable.PSVersion command, it returned me the following:

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1

To run the ConfigureAgent.ps1 script, at least version 3 of Powershell is required. Downloading a more recent version should solve the problem.

Tuesday, August 18, 2015

Team Foundation Server 2015– New Build Agents

Team Foundation Server 2015 introduces a new agent based build system(the old  XAML Workflow based system is still supported).

From the website:

“The new builds are web- and script-based, and highly customizable. They leave behind many of the problems and limitations of the XAML builds. For example, this new system embraces the diverse set of domain-specific languages (DSLs) that developers used to build the code on their dev machines. We expect this will reduce the chances of running into the "builds fine on my machine but not on the CI server" problem. For more details, see Overview of Team Foundation Build 2015.”

Installing these new build agents is easy:

  • Open the TFS Web Access
  • Click on the Administer Server icon in the right corner image
  • Click on the Collection at the top. (In my case ‘DefaultCollection’) image
  • Click on the Build tab image
  • Click on Download Agent to download the agent as a zip fileimage
  • Extract the zip file on your build server(choose a short file path)
  • Open Powershell and invoke the ConfigureAgent.ps1 script
  • Follow the wizard

More information:

Monday, August 17, 2015

Azure Runbooks gallery

In a true ‘DevOps’ spirit, we are evolving our TFS infrastructure from a manually configured environment to a fully scripted setup. One great resource are the Azure Runbooks, a large list of PowerShell scripts that allow you to automate the most common actions in Azure.


These runbooks can be combined with Azure Automation helping you to automate your Cloud OS processes.

Thursday, August 13, 2015

Enable EcmaScript 6 support in Visual Studio Code

Recently Microsoft announced the support for EcmaScript 6 in Visual Studio code.
However when you try to use ES6 features, you get errors:
Hovering over the error, gives some insight on how to fix this:
We have to create or edit our jsconfig.json file and change the target to ES6.
Add a new file and call it jsconfig.json. Add the following configuration settings:
If you now go back to the code file, the errors are gone:
Happy coding!

Start upgrading to .NET 4.5.2 or higher if you are on .NET 4.x

With the release of Visual Studio 2015 and .NET Framework 4.6, Microsoft did some important announcements regarding future support for .NET. If you are a .NET 4.x versions, starting from January 12, 2016, Microsoft will only support .NET Framework 4.5.2 or higher. So if you are using .NET Framework 4, 4.5 or 4.5.1 start updating to .NET 4.5.2 before this date.

As .NET 4.5.2 is an in place upgrade, the impact on your existing .NET 4.x applications should be limited.

Remark: This is only relevant for the .NET 4.x stack, older versions of .NET remain supported.

More information:

Wednesday, August 12, 2015

Visual Studio–Performance profiling a unit test

This morning when running my tests, I noticed that one test was really slow.

You don’t want your test suite to be slow as people will stop running the tests when it takes too much time. So time to figure out what is causing this behavior.

Turns out that this is is pretty easy in Visual Studio 2013 (and 2015):

  • Open up the Test Explorer window
  • Right click on the slow test and choose Profile Test.
    • This will load a Performance Profiling session for the specific test.



Tuesday, August 11, 2015

Professor Frisby’s Mostly Adequate Guide to Functional Programming

Learning functional programming can be hard, especially if your mind is stuck for a long time in an object oriented world. Luckily there are some good books out there.

One book I can recommend to learn the concepts of functional programming is ‘Professor Frisby’s Mostly Adequate Guide to Functional Programming’.  It’s a great resource with a lot of samples and small exercises. All examples in the book are using JavaScript which lowers the entry barrier as you don’t have to learn a new language.


Download the book here:

Monday, August 10, 2015

Be aware : Team Foundation Server 2015 Upgrade can take a long time

With the release of Team Foundation Server 2015, it’s time to upgrade our existing TFS 2013 environments. One warning before you start, upgrading to TFS 2015 can take a long time(depending on the size of your database), a lot longer than upgrading previous versions. The reason for this is that TFS 2015 includes schema changes to a large number of tables in order to support renaming team projects.

If you want to minimize downtime, it is recommended to use TfsPreUpgrade.exe, a small tool that does the most expensive parts of the work to upgrade to TFS 2015 while your TFS 2013 deployment is still online. TfsPreUpgrade.exe works by creating new copies of the tables most impacted by the schema changes present in TFS 2015 and then migrating data from the original tables to the new copies. As TfsPreUpgrade.exe adds some triggers behind the scenes, it can have a negative impact on performance. So only run it when you will upgrade TFS in the near future.

Remark: TfsPreUpgrade.exe can provide a rough estimate of how long it will take to execute by running the Estimate command.

More information:

Friday, August 7, 2015

Visual F# Power Tools

If you are an F# developer, this Visual Studio extension is a must have: Visual F# Power Tools.

This extension offer a variety of features which makes your development experience so much easier.


The feature list:

  • Auto-generating XmlDoc
  • Formatting document / Formatting selection
  • Navigation bar
  • Highlight references
  • Rename refactoring
  • Depth colorizer
  • NavigateTo
  • Syntax coloring
  • Folder organization
  • Find all references
  • Implement interface
  • Record stub generation
  • Union pattern match case generation
  • Resolve unopened namespaces
  • Gray out unused declarations
  • Gray out unused open declarations
  • Go to metadata
  • Task List comments
  • Generate references for F# Interactive
  • Navigate to source
  • Quick info panel

More information:

Thursday, August 6, 2015

Checking if a WSDL is WSI compliant

After a long trip in REST land, I’m back in the SOAP and WSDL world. While creating a WSDL and XSD schema for a project I was asked to check the WSDL for WS-I compliancy.

I removed the dust from SoapUI and loaded the WSDL:

  • Create an empty project


  • Right click on the project and choose Add WSDL:


  • Click on Browse… and select the WSDL you want to import. Click OK.
  • Right click on the loaded WSDL and choose Check WSI Compliance.


Wednesday, August 5, 2015

My favorite Visual Studio 2015 feature–PerfTips

If there is one feature I have to pick from the long list of new things added to Visual Studio 2015, it’s the PerfTips feature. Gone are all the stopwatches in your code, without the need of separate tools you get a simple performance measurement. No excuse any more to ignore the performance characteristics of your code…

If you are using the debugger in Visual Studio 2015, you’ll notice a small tooltip in the editor at the end of the code line indicating how long the program was running since the previous step:


You can click on this tooltip which will bring you to the Diagnostic Tools window where you can see the history of PerfTip values on the Debugger Events break track:


More information here:

Tuesday, August 4, 2015

Decompile F# into C#

Let’s continue our journey in F# land that we started last week. On the I found a great blog post where language concepts were implemented in F#, decompiled to IL and compiled again to C#. This gives you a great insight(if you are a C# developer) in how the F# language works behind the scenes and all the work the compiler is doing for you.

When you look at the results, the biggest differences can be found when looking at F# specific features like Record types and Pattern Matching. Generally, the F# code is much shorter than the equivalent C# code.

It’s almost painful to see how much code you need to write in C#… Verwarde emoticon

Monday, August 3, 2015

Generating unique identifiers across a set of server nodes

Distributed systems come with their own set of problems. One of these problems is the generation of unique identifiers across multiple nodes. You can rely on the database to generate a sequential guid, but this hinders scalability and makes your systems error-prone.

While browsing through the MassTransit code base, I noticed they were using a separate NuGet package called NewId. NewId is a unique id generator with 2 important characteristics:

  • Unique Id generation at a specific server can happen without interaction with other servers
  • Id’s should be ordered(important for database optimization)

It’s inspired by (the retired) Twitter Snowflake and Boundary Flake implementations.

Certainly useful if you need to build scalable solutions…