Это потому, что компилятор Mono написан на C # и использует System.Reflection, что означает, что он может обращаться к mscorlib только из среды выполнения, в которой он запущен.Поэтому, например, smcs не просто нацелен на 2.1, он на самом деле использует 2.1 corlib и т. Д.
Некоторое время планировалось, чтобы * mcs использовал либо Mono.Cecil, либоIkvm.Reflection вместо System.Reflection, что означало бы, что в этом случае может быть один компилятор mcs с аргументами, предназначенными для разных сред выполнения.
Компилятор Microsoft не имеет этого ограничения, поскольку не использует .NET Reflection(написано в нативном коде).