Sample code: App configuration settings for .NET 2.0
August 11, 2008
Note: The following namespaces were used in the C# code below:
System.Collections
System.Collections.Specialized
System.Configuration
System.Data.SqlClient
System.IO
System.Web.Configuration
Retrieving configuration settings (non-web):
Configuration config = ConfigurationManager.OpenExeConfiguration
(ConfigurationUserLevel.None);
or
Configuration config =
ConfigurationManager.OpenMachineConfiguration();
or
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
string fileName = "Example.exe.config";
Debug.Assert (File.Exists(fileName), "This file or path does not
exist");
map.ExeConfigFilename = fileName;
Configuration config =
ConfigurationManager.OpenMappedExeConfiguration
(map, ConfigurationUserLevel.None);
or
// (Using the first four lines from the previous example)
Configuration config =
ConfigurationManager.OpenMappedMachineConfiguration
(map);
or if this is a web application
Configuration webConfig =
WebConfigurationManager.OpenWebConfiguration
(Request.ApplicationPath);
Specifying a version of the .NET Framework to run an app:
<? xml version = "1.0" ?>
<configuration>
<startup>
<supported Runtime version="v1.1.4322" />
</startup>
</configuration>
Telling the runtime to look for a certain assembly
(This technique can also be used for connecting a shared assembly to multiple applications.)
- Create environment variable called DEVPATH and set it to the assembly location
- Tell the runtime to look for the assembly in the location specified by DEVPATH (example below)
<configuration>
<runtime>
<developmentMode developerInstallation = "true" />
</runtime>
</configuration>
<configuration>
<runtime>
<assemblyBinding xmlns="schema">
<dependentAssembly>
<assemblyIdentity name="sampleProgram"
publicKeyToken="xxxxxxxxx"
culture="en-us" />
<codeBase version="x.0.0.0"
href="http://www.example.com/sampleProgram.dll"
/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Configuring appSettings and connectionString settings
<configuration>
<appSettings>
<add key="KeyName" value="KeyValue" />
</appSettings>
<connectionStrings>
<clear />
<add name="SampleSqlServerConnection"
providerName="System.Data.SqlClient"
connectionString="Data Source=localhost;
Initial Catalog=AdventureWorks;
Integrated Security=true" />
</connectionStrings>
</configuration>
Accessing the appSettings values (non-web):
// This example is obsolete and generally should not be used
string appSettingVariable = ConfigurationSettings.AppSettings
["KeyName"];
or
// Better way
NameValueCollection allAppSettings =
ConfigurationManager.AppSettings;
Console.WriteLine(allAppSettings["KeyName"]);
Console.WriteLine(allAppSettings[0]); // same output
int counter = 0;
IEnumerator enumer = allAppSettings.Keys.GetEnumerator();
while (enumer.MoveNext())
{
Console.WriteLine("Item: " + allAppSettings.Keys[counter]);
Console.WriteLine("Value: " + allAppSettings[counter]);
counter++;
}
Retrieving connection strings:
ConnectionStringSettingsCollection csSettings =
ConfigurationManager.ConnectionStrings;
if (csSettings != null)
{
foreach (ConnectionStringSettings setting in csSettings)
{
Console.WriteLine("Name: " + setting.Name);
Console.WriteLine("Provider: " + setting.ProviderName);
Console.WriteLine("Cnxn string: " +
setting.ConnectionString);
}
}
SqlConnection cnxn = new SqlConnection(setting.ConnectionString);
or if this is a web application
// Replace the first line of code above with this:
ConnectionStringsSection csSection =
WebConfigurationManager.GetWebApplicationSection
("connectionStrings") as ConnectionStringsSection;
ConnectionStringSettingsCollection csSettings =
csSection.ConnectionStrings;
Retrieving one particular connection string (non-web):
ConnectionStringSettings settings1 =
ConfigurationManager.ConnectionStrings["sName"]; // by name
ConnectionStringSettings settings2 =
ConfigurationManager.ConnectionStrings[0]; // by index
if (settings1 != null)
{
SqlConnection connection = new SqlConnection(
settings1.ConnectionString);
}
Retrieving a setting (“MyFirstSetting”) from a settings file (“Settings1″):
Let’s say that you added a settings file (Settings1.settings) to your Visual Studio project and created a new setting “MyFirstSetting”, like so:
Here is how you can access the value of that setting programmatically:
Settings1 mySettings = new Settings1();
Console.WriteLine("My first setting: " + mySettings.MyFirstSetting);
Storing and retrieving custom settings (without using a Settings file):
class ExampleWrapperClass : ApplicationSettingsBase
{
[UserScopedSetting()]
public string ExampleUserSetting
{
get { return this["ExampleUserSetting"] as string); }
set { this["ExampleUserSetting"] = value; }
}
[ApplicationScopedSetting()]
public int ExampleAppSetting
{
get { return (Convert.ToInt32(this["ExampleAppSetting"])); }
set { this["ExampleAppSetting"] = value; }
}
}
Registering a component as a server
<system.runtime.remoting>
<application name="ExampleApplication">
<service>
<wellknown type="FullyQualifiedName,AssemblyName"
mode="Singleton" objectUri="ExampleClass.rem" />
</service>
</application>
</system.runtime.remoting>
Configuring a client application to consume a new assembly
(If you are hosting from a local machine on port 5000…)
<system.runtime.remoting>
<application name="ExampleClientApplication">
<service>
<wellknown type="FullyQualifiedName,AssemblyName"
url="http://localhost:5000/ExampleClass.rem" />
</service>
</application>
</system.runtime.remoting>
