Here’s my list of addins an customizations to Visual Studio 2008 that I currently use:
Addins
- Jetbrains Resharper 4.1 – Description should be unnecessary.
- dotTrace 3.1 – Performance/Memory profiling – works well together will R#
- PowerCommands for VS2008 – A couple of nifty commands; especially copy/paste assembly references between projects. (I believe the former name for this addin was CoolCommands).
- Visual Studio Properties Window Search/Find plugin – Adds a textbox to the property grid, that enables you to quickly filter and find a specific property in the list. To install this one, you need to change the 8.0 in the .Addin file to 9.0, and all the files from the archive into the Addins subfolder of My Documents\Visual Studio 2008 (Create one if it’s not present).
- Clone Detective – Just installed this one. The reports says that it actually quite good at detecting “cut’n’pasted” code section, and helps you identify what you can factor out.
- Lexware Assembly Reference Tool for Visual Studio – Great addin for sorting out / cleaning up assembly references. (Before I found this tool, in multi-solution scenarioes I had to open the project files and change the bin\Debug or bin\Release part of the references with bin\$(Configuration) by hand.
- AnkhSVN – Adds Subversion Source Control Management features to Visual Studio. Open source / free.
Color themes and fonts
- Theme: Ragnarok Blue
- Theme: Faculty of the mind
- Font: Envy Code R
- Font: Lucida Console 14pt
- Font: Consolas
Templates and snippets
I have some custom WCF related project & solution templates as well as a couple of snippets that I will polish & publish later.
Shortcuts that I can’t live without
- ctrl+. or shift-alt-F10: multi purpose; typically infer usings of types.
- alt-enter: R# Swiss army knife shortcut
- [ctrl-k, ctrl-c] and [ctrl-k, ctrl-u]: Comment/uncomment section.
- [ctrl-m, ctrl-m], [ctrl-m, ctrl-l] and [ctrl-m, ctrl-o] Collapse/Expand sections.
- shift-alt-Enter: Full screen – code is king!
So, I’m really interested to hear what other people uses and if there are some obvious things missing from my list.
I’m tagging the following persons and ask about their opinions:
Last night, while hacking on the Aggressive project, I where in the need of a container. My initial idea was to try out Autofac, but since I was offline at the moment, I quickly hacked together a small container myself. Since I actually thought the look&feel of the interface was exactly what I wanted, I decided to put the source code in a separate project and give it a name; Tinyject. The code can be found here and is licensed under the Apache License 2.0.
Features:
- A Register() method in different flavors (including generic versions) for registering concrete types & interfaces in the type map.
The Register() methods return this, so they can be chained.
- A Resolve() method in different flavors (including generic versions) for resolving new and existing instances of registered types.
- An idea of instance lifetime; Transient & Singleton.
- Property, field and constructor injection.
- The container implements System.IDisposable, and can be used in a using() { … } scope.
- A static, thread-safe wrapper, TinyjectStatic.
- A small number of xUnit-based unit tests to check the integrity of the stuff.
That’s it. At the moment there is no configuration system – and no extensibility points, but I believe the 2.0 version – maybe developed tonight after the baby swimming, will contain a simple extensible configuration model.
If anyone want to design a logo for it – please go ahead

With Visual Studio 2008 Microsoft bundled a new tool; the WCF Test Client (and its partner in crime; WcfSvcHost). The intention is good, but sadly the tool isn’t the one you pick up when you develop real-life services. (IMHO) The biggest shortcoming is the lack of functionality for saving and loading test data (templates) so you don’t have to enter the data manually each time you fire up the tool.
Last November, I attended the WCF Master Class held at Programutvkling’s premises right outside Oslo and the class instructor was Michèle L. Bustamante of IDesign.
During one of the first days when we still was going through some WCF Fundamentals, we came to discuss the shortcomings of the WCF Test Client, where raised the issue about the missing save/load functionality. I joked that I would see to that the functionality would be there in the end of the week.
Since I’ve played with WCF since the first Indigo bits went public, I had some “free” time during the first days when Michèle walked through the basics, so I set off on my mission equipped with .NET Reflector and VS2008.
I’ve done my amount of “Non-public binding” and .NET hacking before to get passed shortcomings and bugs in the Base Class Library and third part components before, so I had an idea of which strategy to go for.
The easiest solution would have been to use a .NET Reflector addin to disassemble the WcfTestClient.exe into a set of C# source files & a Visual Studio project.
That would have been too easy – and it would have prevented me to release the source code found below.
So the strategy I chose was to create a wrapper, that loads the original assembly, creates the main window form, and inject the UI elements (Save/Load/About tool strip menu buttons).
Everything in the existing assembly is marked as internal, so all object construction and method invocation has to be done by binding to the members with BindingFlags.NonPublic | BindingFlags.Instance. Apart from that, it was really just a dirty job (but somebody had to do it, right?
).
Disclaimer: This code is only for educational purposes and is released to the public domain “AS-IS”.
You can find one of the ugliest hack I’ve ever done here.
Note: I asked a friend of mine, Anders Norås, to do a smoke test on the solution. On his Macbook he got an error when he tried to unzip the archive. So if you have any problems with the ZIP – you can try the RAR.
Instructions
Unpack the LarsW.WcfTestClientEx.zip to a suitable location and open the solution in Visual Studio 2008. There is an assumption in a post build event in the LarsW.WcfTestClientEx project that the original WcfTestClient.exe is located here at C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE. If you’ve installed Visual Studio to another location, you will have to change the post build event.
I’ve bundled a simple test service. If you’re running as a non-administrative user, you will probably have to either use netsh http add urlacl or httpcfg add urlacl to reserve http://localhost:12345/ – or change the service so that it uses another URI for the service endpoint that you have already registered.
Open the solution properties window and set the radio button to Multiple startup projects. Set both projects to Start.
When the WCF Test Client Extended! starts – it analyzes the metadata/WSDL from the service, and populates the operation tree.
Select on of the operations, and enter some test data into the generated UI grid.
Now, use the new Save… item on File menu and store the data to a file. Overwrite the data you entered with something else in the grid, and try the Load… item. Select the file you just persisted the test data to, and it should set the elements in the grid to the values you first entered.
Easy – isn’t it? Well, I have to admit that there is *no* error handling whatsoever, so there is probably a dozen ways the application can puke on you. This is just a proof of concept.
Later, I will show you have you can turn the WcfTestClient.exe into a scriptable console application, where you can specify the input data in one file, and the expected outcome in another (or you can just pipe the output and inspect it later) – could turn very useful for TDD purposes…
PS: One of the reasons I wrote this blog post now, was to have an excuse to advertise for Michèle’s WCF Master Class course starting 13th October 2008. Last time I checked, there was empty seats – so if I were you, I would head over here – and sign up. If you live in Scandinavia – it is really no excuse to skip this opportunity
Update: I just want to explicitly point out that the hack described above is not in the WCF Master Class curriculum.

So, with the new project set up – it is time to decide which players to put on the field, and who’s to ditch.
At the moment, the following is in:
- Visual Studio 2008 / .NET 3.5 / C# 3.0 (SP1)
- Expression Blend 2 SP1
- Resharper 4.1
- CodePlex w/ SvnBridge
- Silverlight 2 RC0
- Windows Communication Foundation
- LINQ to SQL (for first version).
- xUnit 1.0.3
- Autofac 1.2.8.423
- ASP.NET MVC Framework Preview 5
The “maybe” list:
- Some BDD specification framework
- Windsor Castle, Ninject or Unity instead of Autofac
- A mocking framework (RhinoMocks, TypeMock or similar)
- A documentation tool
The “Not/No way” list:
So, I’m currently writing some infrastructure/backend code for Aggressive – a new lightweight time management I’m putting up on CodePlex.
The idea is to us it to practice something that I’m not really good at; TDD – and also try to apply DDD from “top to bottom”.
I’ve taken an interest in internal DSLs and fluent interfaces, so I started to mock up a simple interface for manipulating the Aggressive model.
Take #1:
I tried two different models in the fixtures; the first one where the navigation starts from the user object – and ends up in the task – and the other going the opposite way.
Aaarrrgh.. Grrrr… xUnit 1.0.3 used for testing
I’m open for input & comments.
This post is a work in progress. I feel that I need a place to organize all my pet projects, whether they still only exist in my head or have materialized into some code.
-
Miles Platform
- Active Directory FOAF Gateway – internal beta
- Active Directory Photo Uploader – internal beta
- MOAT (Meaning Of A Tag) service / client – idea
- Internal Library service / client – prototype
-
WCF related
-
Miscellaneous
- Agressive – Silverlight-based, lightweight Time Management System – planning/prototyping stage.
- Visual Studio Theme Explorer – planning phase.
- Tinyject – A tiny IoC/DI container in about 200 lines of C#.
The idea is to release as many of these under a liberal open license – probably hosted on CodePlex or a similar service.