[Monodevelop-devel] Feedback wanted: Settings and data storage locations

Michael Hutchinson m.j.hutchinson at gmail.com
Fri Jan 22 00:25:14 EST 2010

Hi all,

I'm seeking feedback on a proposal to change the locations in which
MonoDevelop stores data. This affects all users, so please have your

Historically MonoDevelop has stored all data, cache, settings, etc. in
a subdirectory of
Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData).
Typically on Linux/Mac this is /home/$USER/.config/MonoDevelop/ and on
Windows Vista/7 it's C:\Users\$USER\AppData\Roaming\MonoDevelop\. The
path has been accessible via PropertyService.ConfigPath, for addins to
determine where to store their own data.

There are a few problems here. Firstly, it's not clear to the user
which data need to be backed up and which can be regenerated. It's not
particularly well-structured if one ever needs to look in the
directory and find things. On Windows, all data is in the roaming
profile, which is inefficient with network logins. And on Mac, this
doesn't match the standard ~/Library subdirectories for caches, prefs,

I therefore propose that we add more granular locations for different
types of data. Since the migration will be a pain and we will have to
review and set up migrations for all current uses, we may as well get
it *right* first time so it only needs to be done once.

* UserPreferencesPath: current preferences/settings
  Lin: ~/.config/MonoDevelop/Preferences
  Mac: ~/Library/Preferences/MonoDevelop/
  Win: ~\AppData\Roaming\MonoDevelop\ Preferences

* UserDataRoot: Root location for data files created or modifiable by
the user, such as templates, snippets and color schemes.
  Lin: ~/.config/MonoDevelop/
  Mac: ~/Library/MonoDevelop/
  Win: ~\AppData\Roaming\MonoDevelop\

* UserCachePath: cached data that can be regenerated
  Lin: ~/.share/local/MonoDevelop/Cache
  Mac: ~/Library/Cache/MonoDevelop/
  Win: ~\AppData\Local\MonoDevelop\Cache

* UserLogsPath: MD log output and anything similar from addins
  Lin: ~/.share/local/MonoDevelop/Logs
  Mac: ~/Library/Logs/MonoDevelop/
  Win: ~\AppData\Local\MonoDevelop\Logs

* UserAddinsPath: addin registry and user-installed addins
  Lin: ~/.share/local/MonoDevelop/Addins
  Mac: ~/Library/Application Support/MonoDevelop/
  Win: ~\AppData\Local\MonoDevelop\Addins

In summary, the contents of UserPreferencesPath and UserDataRoot
should be backed up.

I also intend to add FileService.MigratePath (string
oldRelativeConfigPath, string newFullPath, bool removeEmpty) call that
can be used to migrate files and folders from an old path to a new
path. This can be used to move files and directories to the new

There is also the question of whether some of these directories should
be versioned so that multiple MD versions can be used in parallel on
one user profile. I don't think it's worth the maintenance burden; in
general we've only ever supported forward migrations properly. Perhaps
we should have an error message if you try to run MD with too-new
settings/data formats, or alter all the location properties to point
to some dummy temp location so you can run the older version without
corrupting your newer settings.

You can see the current patch at http://monobin.com/__d215cffd5 if
you're curious.

Michael Hutchinson

More information about the Monodevelop-devel-list mailing list