Some people are doing exactly what you describe. Plus, when you do unit testing in C#, you normally put the classes to be tested in a separate DLL anyway, so that part is not any different. Having "Foo.dll" and "Foo.Test.dll" is a typical approach.
But this client is
very picky about which tools are used. That's okay for now. I have client projects in C#, Python and Ruby right now which keeps me well informed about the pros and cons of these languages and associated tools because I'm actually using them on real projects. I can stomach that for another year or two for the educational benefits.
Re: the exception, I took that approach so I could get a stack trace and also so I could use a debugger on a failure. However, I'm open to a patch that would let you run in either mode.