@Sven Groot: Redgate has their SmartAssembly product. I know some people who use it, and say it works pretty well. The advantage of a product like this is that it injects the functionality into the compiled assembly, so you don't have to write a bunch of plumbing code.

As another general tip, remember that errors can generally be divided into three categories:

  1. Errors that you can handle silently without any user interaction
  2. Stuff that requires you to tell the user "Oops, something happened, try again/close the application and try again"
  3. Finally, errors that cause the application to completely stop

Theoretically you can recover from a lot and continue, but as you find places where errors could occur, you need to make the decision about what can be handled with each level of severity. For example, you don't want to try and silently continue if there is the risk of data loss. Certain commits might be ok to throw a warning about, and others might need to you to allow or cause a full crash in order to prevent damage or to let the user know that something is really wrong and they shouldn't waste their frustration on trying it over and over.