Few hours ago, I've discovered that in order to allow assemblies compiled on Mono to run over the Compact Framework, we needed to patch the assemblies so they use the public key of the Compact Framework instead of them of the .net framework.
First, I've written a patcher that changes in the raw image the references it founds. This solution was somewhat suboptimal because the .net framework uses two public keys, while the Compact Framework use only one.
So I had to write a more complex patcher. This new patcher is using Cecil (it requires a fresh SVN Head to compile), and map every known reference it can to its Compact Framework equivalent. It could be further modified to transform the assembly when needed. For instance, the System.Windows.Forms.DataGrid class is hosted in its own assembly on the Compact Framework. This patcher could create the reference when needed and make the DataGrid points to it.
Yet, I'm not sure it is worth the big effort to create a good patcher.