I'm reasonably certain that SGDK2 and Visual C# Express use the same compiler built into the framework. And I can't remember if I incorporated code into SGDK 2.1 to take advantage of this (I may not have because I wanted it to be backward compatible with .NET 2.0), but the current version of the framework can even compile the project given just the .vcproj file, which is much simpler than what you had to do before if you didn't have Visual Studio (had to manually list all the files and how to compile them).
Yes, the fact that .NET can compile and run code at runtime was one of the main factors that influenced me to rewrite SGDK and to do it in .NET. It's a very powerful and fun feature. That's how I can find out what functions are available in the user-written code -- compile it and ask it what it's got.
Edit: Now I remember what I did. In 2.1, the batch file that compiles the SGDK2 IDE itself takes advantage of the framework's ability to compile a .vcproj file. So if you want to re-compile the SGDK 2.1 IDE, it's very simple even without Visual Studio. But the code in SGDK that compiles the game project still does it the same as it always did. Still, it uses the same compiler, it's just collecting more of the information for compiling manually.