I have a big VS2008 solution with many projects and many compiled assemblies, and I want to obfuscate them, and if possible embed them in only one executable.

The main problem is that some assemblies aren't referenced by the main executable, because they are loaded at runtime through reflection. So, SmartAssembly doesn't load these assemblies, and I can't add them to the final executable.

What James said. You need to create a reference and possibly even use one of the referenced assemblies in your code (by creating a class from it). I say that because I noticed .NET doesn't load an assembly merely because there is a reference and you actually have to do something with the reference and I'd imagine SA behaves the same way.