You can write a self-hosting compiler for C# quite easily. However, the core of the runtime is going to be a major pain in the ass to write self hosting.
Nearly the whole thing. Visual Studio 2010 even goes as far as to use WPF (Windows Presentation Foundation) - a GUI layer entirely written in managed code.
Of course, satellite dll's & exe tools aren't all written in managed code. It's silly to re-write everything. But the main Visual Studio application has been at least partially managed since the Visual Studio 2002 days.
P.S. I don't work for MS, but I do know this for a fact.
I work for MS and do Visual Studio integration work for XNA Game Studio.
The whole of VS isn't even close to being mostly managed code. While it is true that 2010's GUI is mostly managed code, thanks to WPF, the internals are entirely COM. The project system, debuggers, command system, and many other large components are all C++/COM. Even many of the components which are managed read more like C++ than like C# due to all the QueryInterface and ref counting nonsense.
Developer devision, commonly known as DevDiv, contains the VS team, programming language teams, and many other related teams. DevDiv is by far the company's largest consumer of managed code. I'd bet that there is more managed code in DevDiv's source tree than the rest of the company combined. That doesn't mean they threw out 30+ years of efforts and backwards compatibility all at once.
I was referring to GUI of Visual Studio - but thanks for the clarification. I didn't mean to imply MS replaced 30 years of code in one go. I should've written more carefully.
I didn't say they rewrote everything for .NET. There is managed C++ which uses the CLR while also support native C++ code. So they could use code written in the 80's with managed C++.
I seriously doubt they rewrote Visual Studio to be completely managed. That would be incredibly stupid for more than one reason.
For VS2008 it's mostly the build engine, design surfaces / property inspectors, and various wrapper classes to permit managed code to interact with the older COM-oriented core.
I did a dump of managed heap on VS2008 with a managed solution loaded. These are the Microsoft.* classes which were instantiated at the time of the dump:
I thought the Mono CLR is written in C#, as is the C# compiler which compiles itself. Did I misunderstand something?