Freelance and volunteering to help out with non-profits are a great way to learn new skills. You're right, you can only learn so much on your own. When you're under the gun, you learn a LOT more. Bonus points if you can find a place with a knowledgeable, patient mentor who will guide you and suggest improvements to your work.
I worked for several years in light-challenge type jobs where I was on my own to get the job done...then I consulted with an international bank...instant code reviews, change management, strategy meetings, and tight timeframes....I sweated it out for quite a few months before I really got comfortable. Between that and my freelancing (which I often take at a lower cost in exchange for the opportunity to tackle a challenge the RIGHT way rather than the cheap way) I've made huge progress over the last few years. It's a good feeling knowing you know how to kick out "correct" code. Doing it, I might add, still takes discipline.
You could look into stuff like
- Microsoft Web Platform Installer and WebMatrix (still in beta)
- Content Management Systems
WebPI and WebMatrix are great tools to know for web devs. CMS’s are a very common tool to use when building content oriented websites and XSLT is imho a awesome tech for web development. If you are unfamiliar with XSLT it’s basically a transformation that can turn one XML structure (typically describing data) into another XML structure (typically xhtml).
If you want to have a go at all the points above you can get started with WebPI and WebMatrix at http://docs.composite.net/C1/TeamBlog.aspx/2010/08/13/The-WebMatrix-experience and once you have it running you can work with XSLT at http://docs.composite.net/C1/XSLT.aspx.
We would love to get feedback from you on your experience.
Consider getting involved in open source projects. It's invaluable experience - working in teams, networking with peers, challenging yourself by taking on tasks you aren't familiar with, etc. For .NET-related projects, Codeplex is ground zero.
If you can't find the "right" OSS project to join, create one. Even if it's just you working by yourself, re-inventing the same old wheels, putting it out freely into the world will draw attention to it, and draw like-minded peers (and possibly plenty of harsh criticism, but that's useful too) and help pave the way for future projects.
As a bonus, you'll be able to stick it in your portfolio, which you generally won't be able to do as an employee for a company - they own the code, you can't do anything with it. This is huge: I'm in the middle of starting my own consultancy with a lot of holes in my own portfolio, and it stings a little.