Portrait of Mike Barnett

Mike Barnett

Principal Research Software Design Engineer

About

I am a Research Software Design Engineer in the MSR Ability Group, having joined it in May 2018.

I have been with the Microsoft Corporation since July 1995. First, I was a member of the Natural Language Processing group in Microsoft Research, moving to the Foundations of Software Engineering group in the fall of 1999. Then I was a member of the Research in Software Engineering (RiSE) group since its inception.

Before coming to Microsoft, I had been an assistant professor of Computer Science at the University of Idaho for three years. I received my PhD in Computer Science from the University of Texas at Austin in 1992.

Projects

Publications

Videos

Downloads

Other

What I Do

  • Trill: A streaming query processor. It is the fastest in the world. Seriously.
  • Cluster Changes: Improving the process of code review. See our paper “Helping Developers Help Themselves” at ICSE 2015.
  • ILMerge: a static linker for .NET assemblies.
  • Play petanque (about halfway down the page on the 1 October entry).

What I Did

  • Tempe: An environment for doing interactive data analytics. Check out our video! And there’s a blog post describing how Trill and Tempe are being used.
  • Code Contracts: a language-agnostic way to express specifications in any .NET language. Specifications include method preconditions, postconditions, and object invariants. Code Contracts capture programmer intentions about how methods and data are to be used. You can install the tools from the VS Gallery. And now it has been open-sourced and available at GitHub.
  • CCI: The Common Compiler Infrastructure is the framework to use if you are doing anything related to .NET binaries, either creating them from scratch, modifying existing ones, or just mining them for information. It is open-source and available at CodePlex.
  • Spec#: an experimental extension to C# that adds contract features such as method pre- and postconditions and object invariants. It also has a non-null type system. The Spec# compiler emits run-time checks that enforce the contracts and the Spec# program verifier uses theorem-proving technology to statically check the consistency between a program and its contracts. Spec# helps programmers write correct software and makes explicit the correct usage of APIs for clients. It is integrated into Visual Studio .NET. It is available as an open source project.

ILMerge

ILMerge is a utility that merges multiple .NET assemblies into a single assembly. It is available as open source and also as a NuGet package.

If you have any problems using it, please get in touch. (mbarnett _at_ microsoft _dot_ com). But first try reading the documentation.


ILMerge takes a set of input assemblies and merges them into one target assembly. The first assembly in the list of input assemblies is the primary assembly. When the primary assembly is an executable, then the target assembly is created as an executable with the same entry point as the primary assembly. Also, if the primary assembly has a strong name, and a .snk file is provided, then the target assembly is re-signed with the specified key so that it also has a strong name.

ILMerge is packaged as a console application. But all of its functionality is also available programmatically.

There are several options that control the behavior of ILMerge. See the documentation that comes with the tool for details.

NOTE: There is no longer a version of ILMerge that runs in the v1.1 runtime.

ILMerge runs in the v4.0 .NET Runtime, but it is also able to merge assemblies from other framework versions using the /targetplatformoption. Please see the documentation. (However, it can merge PDB files only for v2 (and later) assemblies.)

ILMerge works only on Windows but the resulting assembly works both on .Net and Mono.

If you use ASP.NET v2.0, then it provides a tool (based on ILMerge) to combine assemblies created during precompilation. You can get more details from the ASP.NET web site.