Here is a comment Joe made about my previous post.
... One additional facet that will probably go (mostly) unnoticed is that you can throw exceptions across assembly boundaries, and the wrapping will occur based on the assembly-level attribute on the assembly whose catch block is being evaluated. This makes interoperability with code that isn't on the wrapping plan, e.g. COBOL or Eiffel, work seamlessly as you would expect.
This comment is rather hidden in how I have my page designed, but I thought it worthy of it's own posting anyhow.