I had a wild thought today. I\'ve been discovering that my users like my web UIs more than my WinForms UIs...but there are good reasons to still write a \'smart client\' app
Though late to the party, check out the C# webserver
You can use the Cassini web server.
http://www.asp.net/Downloads/archived/cassini/
3.5 download: http://blogs.msdn.com/dmitryr/archive/2008/10/03/cassini-for-framework-3-5.aspx
v2 download: http://blogs.msdn.com/dmitryr/archive/2006/03/09/cassini-update.aspx
Yes, short answer: get the source for Cassini and it shows you how to host the web server.
I've used this technique to host web services (*.asmx). When the application is online, it can connect to the internet and use a web service there. When it's offline, it uses "localhost" to connect to it's local instance of the web service. This way you only need to write one data access layer.
I think a wild thought is a understatement ;) I strongly urge you to consider if there isn't something you are missing, if there isn't a better solution but here it goes...
There is such a lightweight server. It's also being used by visual studio for developers. It was originally called Cassini which uses System.Web.Hosting (a low level API for creating a http server and hosting the asp.net process)