I posted a response and I thought I'd put it here so I could refer back to it later:
Nice post. Those points make alot of sense to me.
I don't think that .Net needs a 'strong open-source community to survive' but I think .Net is stronger with a community that can plug the gaps, create extensions and explore opportunites and innovations. The open-source community allows geeks to explore and think and isn't it better for .Net if this is happening in .Net and not Java? So I think fostering the open-source community is something that should be in Microsoft's interests.
In the world of Java there are many companies. In the world of .Net there (with a few exceptions) is just one.
In the world of Java, an open source project can create something that is 'another option' and people will use it because they are used to having lots of options.
In the world of .Net, an open source project can do the same thing and people are less likely to use it because they are used to only having one option.
I think the mindset of the average Microsoft developer is different. The average Microsoft developer is traditionally a Mort who just wants to use the recommended tools to get stuff done. I think the average Microsoft developer is changing, and so the support for .Net open source is getting larger and louder.
If having a viable open source community is important to Microsoft, then they could do a few things:
1. Stop saying that open source is bad. But rather something more like 'open source is good in certain situations'.
2. Put a Microsoft person as a 'buddy' on open source projects that have achieved a certain momentum.
3. Look for ways to leverage open source efforts rather than replacing them. A good example of this replacement is how VSTS unit test is almost identical to NUnit. If replacement is happening because of licensing issues, then tell the open source community (via the project buddies?) which licenses should be used (or better yet provide one to be used) so that open source projects are extended and not eclipsed. If the replacement is happening for a reason (such as "we want to build on top of a base that we control"), then just explain the reason.
And to add to that...
I'm a big fan of projects such as NUnit, Spring.Net, OJB.Net, and NHibernate. I think they cover areas that Microsoft doesn't at the moment while we are waiting for things like WinFS, MBF, and VSTS to be released. And while they aren't helping .Net 'survive', I definitely believe they are adding something to .Net development... whether that means making it stronger, or more interesting, or easier to develop in, or whatever.