The first option sounds great in theory until you are working on one of your projects, and you really would like to implement some function for the full version, but you cannot have a compact version because it does not support it.
I would suggest trying to isolate all the “lowest common denominator” code into separate assemblies from everything else. If you handle the problem section correctly, you can have a front end for your complete and compact projects by connecting the appropriate assemblies in each corresponding interface.
However, I think this is probably a good tip to start by aiming at a compact framework. Separate the problems when necessary, and when you get to the point where you really need an extra feature in the full version, then you need to split into two front ends. Do not do this until you need it, otherwise YAGNI.
source share