The C# compiler and IL certainly support types as constant expressions, at least in certain situations. Look at attributes, they use this a lot:
[DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))]
The type is embedded as a string in the compiler generated code, above line compiles to the following IL code:
.custom instance void System.Diagnostics.DebuggerTypeProxyAttribute::.ctor(class System.Type) = (
01 00 39 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63
74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 2e 4d 73
63 6f 72 6c 69 62 5f 43 6f 6c 6c 65 63 74 69 6f
6e 44 65 62 75 67 56 69 65 77 60 31 00 00
)
If you inspect the binary data, you will notice this is the fully qualified class name without any assembly identification (System.Collections.Generic.Mscorlib_CollectionDebugView`1).
To answer your question: I do not see any technical reason why this should not be possible, nor can I imagine compatibility considerations that prevent it as there is no assembly reference serialized and therefore the DLL declaring this type still can be updated without affecting the previously compiled type referencing it.