Storing application specific configuration data in Sharepoint?

sharepoint, web-config

Solution

Web.Config is, IMHO, a terrible place to store this sort of config information - its hard to deploy and hard to change, especially if you're using multiple web front ends.

The recommended way to do this is to use PropertyBag (key/value pairs) through the .Properties of SPFarm, SPWeb.RootWeb (for site collections), SPWeb, SPList etc (depending upon the scope that you need).

MSDN - Managing Custom Configuration Options for a SharePoint Application

There is a production ready code available as part of the

MSDN - The SharePoint Guidance Library

See Hierarchical configuration manager

This gives you programmatic access to read/write these values. If you want to do this without using the guidance library then you would use something like the following code.

SPWeb web = SPContext.Current.Web;
if (web.Properties.ContainsKey("MyProperty"))
   string myProperty = web.Properties["MyProperty"];

If you want a UI to allow admins to easily set the values then use something like SharePoint Property Bag Settings

Problem

I am making a Sharepoint 2010 WebPart with functionality from another Main Web Application. To develop the Webpart quickly I have imported the business logic assemblies used in the Main Web Application. The Webpart works and pulls application specific configuration information from the Sharepoint web.config file. Is this the best place to store this information? If not.. Where/How should the application specific configuration data be stored in Sharepoint? The config data contains items like locations of web services etc. The data will only need to be edited by system administrators. Thanks

Original source