I'd like to deploy a ClickOnce application, but would like to have a configurable user file to store settings and preferences that does not get overwritten everytime I publish a new version. Is there to specify that a particular file should get deployed in any installation that doesn't already have one, but not overwrite any previous versions?

The only workaround that I can envision is to store the data in a database, but it's so user-centric that it seems like a lot of overhead to re-invent the config file.

One approach is to use application settings, which we used for a WPF application deployed with ClickOnce. We have multiple settings for such things as user specified download folders, default settings, etc. For each such setting, the Scope is set to User. When the setting is changed by the user the new values are persisted with a call such as:

YourProject.Properties.Settings.Default.UserSetting1 = "New Value";
YourProject.Properties.Settings.Default.Save(); // persists the new value for the current user

Even with multiple updates of the application via ClickOnce, these settings are persisted for each user. Note that the settings are persisted on a per-machine basis, so if a user goes to a new machine and downloads the application, their settings will not be transferred.

Hope this helps,