Are warning-free builds really a good thing?

I’m a big fan of pipelines that fail for warnings as well as errors. Such a policy keeps repos clean, current, less buggy, and even more agile….

Library.Template: A git repo template for .NET development

It is amazing what the .NET SDK can enable you to build with so little code. But very soon you need to add a cloud build pipeline…

Update on the secure messaging IronPigeon protocol and the Dart application

In my last post I mentioned I was focusing my attention on the IronPigeon protocol. Since then, the IronPigeon project has matured and added support for both…

GC pressure series: hidden boxing

Last time we talked about GC pressure from enumerating collections using their interfaces rather than their concrete types.  It turns out that the garbage produced by using…

GC pressure series: Introduction and enumerators

As you may already know, I’m a Microsoft developer who works on Visual Studio.  Improved performance and responsiveness is a major goal for the 2012 release.  As…

A brief survey of the various .NET unit test frameworks

In summary, someone please fix NUnit to support async task methods. MSTest Pros: Best IDE experience for VS2010 and earlier (VS 2012 supports MSTest and other frameworks…

Read only, frozen, and immutable collections

[Update: a more recent post with new data on attainable performance of immutable collections] The topics of immutability and functional programming has fascinated me lately.  Mostly because…

C# await for MSBuild

The async CTP that adds the C# await keyword doesn’t include an awaitable MSBuild.  It’s easy to add yourself.  Just copy and paste the the BuildSubmissionAwaitExtensions class…

C# await for WaitHandle

The async CTP that adds the C# await keyword doesn’t include an awaitable WaitHandle.  It’s easy to add yourself.  Just copy and paste the following code somewhere…

.NET Obfuscator Product Review

CliSecure .NET Obfuscator Product Review Forward .NET assemblies are (in general) remarkably easy to decompile and obtain reasonably intelligible source code.  A .NET obfuscator can be run…