I would like my Core assembly to not expose a certain class and I would still like to be able to test it. How can I do that ?
I would suggest not going to such troubles ... if you really want to unit test your "internal" classes, just hide them away in a namespace that only your internal code would end up using. Unless you're writing a framework on the scale of the .NET framework, you don't really need that level of hiding.