One problem (if you consider it a problem at all) is that .Net is following in almost precisely the footsteps of Java. No surprise, since in a very real sense it's a clone of the basic concept.
The "weakness" is in Windows Forms. If you follow the discussion around this topic in current blogs by Microsoft folks and people close to Microsoft you'll see plenty on the subject. There are simply a whole lot of things that can't be done from their managed code environment yet. With time more of the Win32 APIs will be "wrapped" for more convenient use from .Net languages. Until that point you end up doing a lot of work-arounds to get at native parts of Windows... to the point where coding in C++ or even VB6 puts you ahead of the game yet.
There is also the learning curve to consider, and this is as steep in-house as in the ISV and customer communities.
There is also Avalon to consider. For many classes of applications this will probably replace WinForms. How do you justify ramping up to develop for a GUI system that may be sunsetted in 3 years?
Finally, there remains the slow uptake of the Framework out in the wild. Especially when one must ask the question which Framework? This is still a deployment burden far beyond that of the old VB runtimes, and versions have come out rather furiously to date by comparison with VB.
But .Net is getting there slowly. Even if it never becomes common outside of the server environment it will probably remain a strong competitor to Java.
I think the good news is that this slow progress within Microsoft should serve as a sanity-check for outside development organizations. It shows where we ought to be making progress with .Net and where we needn't be rushing headlong.