Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Configuration
Imports System.Collections
Imports System.Collections.Specialized
Imports System.Diagnostics
' The following example shows how to use the ConfigurationManager
' class in a console application.
'
' IMPORTANT: To compile this example, you must add to the project
' a reference to the System.Configuration assembly.
'
Namespace Samples.Aspnet
#Region "Auxiliary Classes"
' Define a custom configuration element to be
' contained by the ConsoleSection. This element
' stores background and foreground colors that
' the application applies to the console window.
Public Class ConsoleConfigElement
Inherits ConfigurationElement
' Create the element.
Public Sub New()
End Sub
' Create the element.
Public Sub New(ByVal fColor As ConsoleColor, _
ByVal bColor As ConsoleColor)
ForegroundColor = fColor
BackgroundColor = bColor
End Sub
' Get or set the console background color.
<ConfigurationProperty("background", _
DefaultValue:=ConsoleColor.Black, IsRequired:=False)> _
Public Property BackgroundColor() As ConsoleColor
Get
Return DirectCast(Me("background"), ConsoleColor)
End Get
Set(ByVal value As ConsoleColor)
Me("background") = value
End Set
End Property
' Get or set the console foreground color.
<ConfigurationProperty("foreground", _
DefaultValue:=ConsoleColor.White, IsRequired:=False)> _
Public Property ForegroundColor() As ConsoleColor
Get
Return DirectCast(Me("foreground"), _
ConsoleColor)
End Get
Set(ByVal value As ConsoleColor)
Me("foreground") = value
End Set
End Property
End Class
' Define a custom section that is used by the application
' to create custom configuration sections at the specified
' level in the configuration hierarchy.
' This enables the the user that has the proper access
' rights, to make changes to the configuration files.
Public Class ConsoleSection
Inherits ConfigurationSection
' Create a configuration section.
Public Sub New()
End Sub
' Set or get the ConsoleElement.
<ConfigurationProperty("consoleElement")> _
Public Property ConsoleElement() _
As ConsoleConfigElement
Get
Return (DirectCast(Me("consoleElement"), _
ConsoleConfigElement))
End Get
Set(ByVal value As ConsoleConfigElement)
Me("consoleElement") = value
End Set
End Property
End Class
#End Region
#Region "ConfigurationManager Interaction Class"
' The following code uses the ConfigurationManager class to
' perform the following tasks:
' 1) Get the application roaming configuration file.
' 2) Get the application configuration file.
' 3) Access a specified configuration file through mapping.
' 4) Access the machine configuration file through mapping.
' 5) Read a specified configuration section.
' 6) Read the connectionStrings section.
' 7) Read or write the appSettings section.
Public Class UsingConfigurationManager
' Get the roaming configuration file associated
' with the application.
' Note.This function uses the OpenExeConfiguration(
' ConfigurationUserLevel userLevel) method to
' get the configuration file.
Public Shared Sub GetRoamingConfiguration()
' Define the custom section to add to the
' configuration file.
Dim sectionName As String = "consoleSection"
Dim cSection As ConsoleSection = Nothing
' Get the roaming configuration
' that applies to the current user.
Dim roamingConfig As Configuration = _
ConfigurationManager.OpenExeConfiguration( _
ConfigurationUserLevel.PerUserRoaming)
' Map the roaming configuration file. This
' enables the application to access
' the configuration file using the
' System.Configuration.Configuration class
Dim configFileMap As New ExeConfigurationFileMap()
configFileMap.ExeConfigFilename = roamingConfig.FilePath
' Get the mapped configuration file.
Dim config As Configuration = _
ConfigurationManager.OpenMappedExeConfiguration( _
configFileMap, ConfigurationUserLevel.None)
Try
cSection = DirectCast(config.GetSection(sectionName), _
ConsoleSection)
If cSection Is Nothing Then
' Create a custom configuration section.
cSection = New ConsoleSection()
' Define where in the configuration file
' hierarchy the associated
' configuration section can be declared.
cSection.SectionInformation.AllowExeDefinition = _
ConfigurationAllowExeDefinition.MachineToLocalUser
' Allow the configuration section to be
' overridden by other configuration files.
cSection.SectionInformation.AllowOverride = True
' Force the section to be saved.
cSection.SectionInformation.ForceSave = True
' Store console settings for roaming users.
cSection.ConsoleElement.BackgroundColor = _
ConsoleColor.Blue
cSection.ConsoleElement.ForegroundColor = _
ConsoleColor.Yellow
' Add configuration information to
' the configuration file.
config.Sections.Add(sectionName, cSection)
config.Save(ConfigurationSaveMode.Modified)
' Force a reload of the changed section. This
' makes the new values available for reading.
ConfigurationManager.RefreshSection(sectionName)
End If
Catch e As ConfigurationErrorsException
Console.WriteLine("[Exception error: {0}]", _
e.ToString())
End Try
' Set console properties using values
' stored in the configuration file.
Console.BackgroundColor = _
cSection.ConsoleElement.BackgroundColor
Console.ForegroundColor = _
cSection.ConsoleElement.ForegroundColor
' Apply the changes.
Console.Clear()
' Display feedback.
Console.WriteLine()
Console.WriteLine("Performed the following tasks:")
Console.WriteLine("Created roaming configuration file {0}", config.FilePath)
Console.WriteLine("Created custom ConsoleSection.")
Console.WriteLine( _
"Stored background (blue) and foreground (yellow) colors.")
Console.WriteLine( _
"Added the section to the configuration file.")
Console.WriteLine( _
"Read stored colors from the configuration file.")
Console.WriteLine( _
"Applied the colors to the console window.")
Console.WriteLine()
End Sub
' Get the application configuration file.
' Note. This function uses the
' OpenExeConfiguration(string)method
' to get the application configuration file.
Public Shared Sub GetAppConfiguration()
' Get the application path needed to obtain
' the application configuration file.
Dim applicationName As String = _
Environment.GetCommandLineArgs()(0) + ".exe"
Dim exePath As String = _
System.IO.Path.Combine(Environment.CurrentDirectory, _
applicationName)
' Get the configuration file. The file name has
' this format appname.exe.config.
Dim config As System.Configuration.Configuration = _
ConfigurationManager.OpenExeConfiguration(exePath)
Try
' Create a custom configuration section
' having the same name used in the
' roaming configuration file.
' This is possible because the configuration
' section can be overridden by other
' configuration files.
Dim sectionName As String = "consoleSection"
Dim customSection As New ConsoleSection()
If config.Sections(sectionName) Is Nothing Then
' Store console settings.
customSection.ConsoleElement.BackgroundColor = _
ConsoleColor.Black
customSection.ConsoleElement.ForegroundColor = _
ConsoleColor.White
' Add configuration information to the
' configuration file.
config.Sections.Add(sectionName, customSection)
config.Save(ConfigurationSaveMode.Modified)
' Force a reload of the changed section.
' This makes the new values available for reading.
ConfigurationManager.RefreshSection(sectionName)
End If
' Set console properties using values
' stored in the configuration file.
customSection = DirectCast(config.GetSection(sectionName), _
ConsoleSection)
Console.BackgroundColor = _
customSection.ConsoleElement.BackgroundColor
Console.ForegroundColor = _
customSection.ConsoleElement.ForegroundColor
' Apply the changes.
Console.Clear()
Catch e As ConfigurationErrorsException
Console.WriteLine("[Error exception: {0}]", e.ToString())
End Try
' Display feedback.
Console.WriteLine()
Console.WriteLine("Performed the following tasks:")
Console.WriteLine( _
"Created the application configuration file {0}", _
config.FilePath)
Console.WriteLine("Created custom ConsoleSection.")
Console.WriteLine( _
"Stored background (black) and foreground (white) colors.")
Console.WriteLine( _
"Added the section to the configuration file.")
Console.WriteLine( _
"Read stored colors from the configuration file.")
Console.WriteLine( _
"Applied the colors to the console window.")
Console.WriteLine()
End Sub
' Get the AppSettings section.
' This function uses the AppSettings property
' to read the appSettings configuration
' section.
Public Shared Sub ReadAppSettings()
Try
' Get the AppSettings section.
Dim appSettings As NameValueCollection = _
ConfigurationManager.AppSettings
' Get the AppSettings section elements.
Console.WriteLine()
Console.WriteLine("Performed the following tasks:")
Console.WriteLine("Read application settings:")
Console.WriteLine()
If appSettings.Count = 0 Then
Console.WriteLine( _
"[ReadAppSettings: {0}]", _
"AppSettings is empty Use GetSection command first.")
End If
Dim i As Integer = 0
While i < appSettings.Count
Console.WriteLine("#{0} Key: {1} Value: {2}", i, _
appSettings.GetKey(i), appSettings(i))
System.Math.Max( _
System.Threading.Interlocked.Increment(i), i - 1)
End While
Catch e As ConfigurationErrorsException
Console.WriteLine("[ReadAppSettings: {0}]", _
e.ToString())
End Try
End Sub
' Get the ConnectionStrings section.
' This function uses the ConnectionStrings
' property to read the connectionStrings
' configuration section.
Public Shared Sub ReadConnectionStrings()
' Get the ConnectionStrings collection.
Dim connections _
As ConnectionStringSettingsCollection = _
ConfigurationManager.ConnectionStrings
If connections.Count <> 0 Then
Console.WriteLine()
Console.WriteLine("Performed the following tasks:")
Console.WriteLine("Read connection strings:")
Console.WriteLine()
' Get the collection elements.
For Each connection _
As ConnectionStringSettings In connections
Dim name As String = connection.Name
Dim provider As String = connection.ProviderName
Dim connectionString As String = _
connection.ConnectionString
Console.WriteLine("Name: {0}", _
name)
Console.WriteLine("Connection string: {0}", _
connectionString)
Console.WriteLine("Provider: {0}", _
provider)
Next
Else
Console.WriteLine()
Console.WriteLine( _
"No connection string is defined.")
Console.WriteLine()
End If
End Sub
' Create the AppSettings section.
' The function uses the GetSection(string)method
' to access the configuration section.
' It also adds a new element to the section
' collection.
Public Shared Sub CreateAppSettings()
' Get the application configuration file.
Dim config As System.Configuration.Configuration = _
ConfigurationManager.OpenExeConfiguration( _
ConfigurationUserLevel.None)
Dim sectionName As String = "appSettings"
' Add an entry to appSettings.
Dim appStgCnt As Integer = _
ConfigurationManager.AppSettings.Count
Dim newKey As String = "NewKey" + appStgCnt.ToString()
Dim newValue As String = _
DateTime.Now.ToLongDateString() + " " + _
DateTime.Now.ToLongTimeString()
config.AppSettings.Settings.Add(newKey, newValue)
' Save the configuration file.
config.Save(ConfigurationSaveMode.Modified)
' Force a reload of the changed section. This
' makes the new values available for reading.
ConfigurationManager.RefreshSection(sectionName)
' Get the AppSettings section.
Dim appSettingSection As AppSettingsSection = _
DirectCast(config.GetSection(sectionName), _
AppSettingsSection)
' Display raw xml.
Console.WriteLine()
Console.WriteLine("Performed the following tasks:")
Console.WriteLine("Created AppSettings section.")
Console.WriteLine("Added new element to the section.")
Console.WriteLine("Read the following settings:")
Console.WriteLine()
' Get the AppSettings XML.
Console.WriteLine( _
appSettingSection.SectionInformation.GetRawXml())
End Sub
' Access a configuration file using mapping.
' This function uses the OpenMappedExeConfiguration
' method to access the roaming and the application
' configuration files.
' It then uses the the custom ConsoleSection from
' each file to console window colors.
Public Shared Sub MapExeConfiguration()
' Cotains the selected configuration.
Dim config As System.Configuration.Configuration
' Get the roaming configuration file.
Dim roamingConfig As Configuration = _
ConfigurationManager.OpenExeConfiguration( _
ConfigurationUserLevel.PerUserRoaming)
' Get the application configuration file.
Dim appConfig As Configuration = _
ConfigurationManager.OpenExeConfiguration( _
ConfigurationUserLevel.None)
' To map the selected configuration file.
Dim configFileMap As New ExeConfigurationFileMap()
' Map roaming configuration. This allows
' access to the roaming configuration file.
configFileMap.ExeConfigFilename = roamingConfig.FilePath
' Get the mapped configuration file
config = _
ConfigurationManager.OpenMappedExeConfiguration( _
configFileMap, ConfigurationUserLevel.None)
Dim sectionName As String = "consoleSection"
Dim customSection As ConsoleSection = _
DirectCast(config.GetSection(sectionName), _
ConsoleSection)
' Set console properties using the
' configuration values contained in the
' mapped configuration file.
Console.BackgroundColor = _
customSection.ConsoleElement.BackgroundColor
Console.ForegroundColor = _
customSection.ConsoleElement.ForegroundColor
Console.Clear()
Console.WriteLine()
Console.WriteLine("Performed following tasks:")
Console.WriteLine( _
"Mapped roaming configuration file: {0}", config.FilePath)
Console.WriteLine( _
"Set console colors from stored configuration values.")
Console.WriteLine()
Console.Write( _
"Press Enter to switch to default colors.....")
Console.ReadLine()
' Map roaming configuration. This allows
' access to the application configuration file.
configFileMap.ExeConfigFilename = appConfig.FilePath
' Get the mapped configuration file
config = _
ConfigurationManager.OpenMappedExeConfiguration( _
configFileMap, ConfigurationUserLevel.None)
customSection = _
DirectCast(config.GetSection(sectionName), _
ConsoleSection)
If customSection Is Nothing Then
customSection = New ConsoleSection()
' Store console settings.
customSection.ConsoleElement.BackgroundColor = _
ConsoleColor.Black
customSection.ConsoleElement.ForegroundColor = _
ConsoleColor.White
' Add configuration information to the
' configuration file.
config.Sections.Add(sectionName, customSection)
config.Save(ConfigurationSaveMode.Modified)
' Force a reload of the changed section.
' This makes the new values available for reading.
ConfigurationManager.RefreshSection(sectionName)
End If
' Set console properties using the
' configuration values contained in the
' mapped configuration file.
Console.BackgroundColor = _
customSection.ConsoleElement.BackgroundColor
Console.ForegroundColor = _
customSection.ConsoleElement.ForegroundColor
Console.Clear()
Console.WriteLine( _
"Mapped application configuration file: {0}", _
config.FilePath)
Console.WriteLine( _
"Set console colors from stored configuration values.")
Console.WriteLine()
End Sub
' Access the machine configuration file using mapping.
' The function uses the OpenMappedMachineConfiguration
' method to access the machine configuration.
Public Shared Sub MapMachineConfiguration()
' Get the machine.config3 file.
Dim machineConfig As Configuration = _
ConfigurationManager.OpenMachineConfiguration()
' Get the machine.config file path.
Dim configFile _
As New ConfigurationFileMap(machineConfig.FilePath)
' Map the application configuration file to the machine
' configuration file.
Dim config As Configuration = _
ConfigurationManager.OpenMappedMachineConfiguration( _
configFile)
' Get the AppSettings section.
Dim appSettingSection As AppSettingsSection = _
DirectCast(config.GetSection("appSettings"), _
AppSettingsSection)
appSettingSection.SectionInformation.AllowExeDefinition = _
ConfigurationAllowExeDefinition.MachineToRoamingUser
' Display the configuration file sections.
Dim sections As ConfigurationSectionCollection = _
config.Sections
Console.WriteLine()
Console.WriteLine( _
"Using OpenMappedMachineConfiguration.")
Console.WriteLine( _
"Sections in machine.config:")
' Get the sections in the machine.config.
For Each section As ConfigurationSection In sections
Dim name As String = section.SectionInformation.Name
Console.WriteLine("Name: {0}", name)
Next
End Sub
End Class
#End Region
#Region "User Interaction Class"
' Obtain user's input and provide feedback.
' This class contains the application Main() function.
' It calls the ConfigurationManager methods based
' on the user's selection.
Class ApplicationMain
' Display user's menu.
Public Shared Sub DisplayUserMenu()
Dim applicationName As String = _
Environment.GetCommandLineArgs()(0)
If Not applicationName.Contains(".exe") Then
applicationName = _
[String].Concat(applicationName, ".exe")
End If
Dim buffer As New StringBuilder()
buffer.AppendLine()
buffer.AppendLine("Application: " + applicationName)
buffer.AppendLine("Please, make your selection.")
buffer.AppendLine("Q,q -- Exit the application.")
buffer.Append("1 -- Set console window colors")
buffer.AppendLine(" to blue and yellow")
buffer.AppendLine(" from the roaming configuration.")
buffer.AppendLine("2 -- Ceate appSettings section.")
buffer.AppendLine("3 -- Read appSettings section.")
buffer.AppendLine(" Values merged from application config.")
buffer.Append("4 -- Set console window colors")
buffer.AppendLine(" to black and white")
buffer.AppendLine(" from the application configuration.")
buffer.AppendLine("5 -- Read connectionStrings section.")
buffer.AppendLine(" Values merged from machine.config.")
buffer.AppendLine("6 -- Get specified configuration file.")
buffer.Append(" Set console window colors")
buffer.AppendLine(" from configured values.")
buffer.AppendLine("7 -- Get machine.config file.")
buffer.AppendLine()
Console.Write(buffer.ToString())
End Sub
' Obtain user's input and provide
' feedback.
Shared Sub Main(ByVal args As String())
' Define user selection string.
Dim selection As String = ""
' Get the name of the application.
Dim appName As String = _
Environment.GetCommandLineArgs()(0)
While selection.ToLower() <> "q"
' Process user's input.
Select Case selection
Case "1"
' Show how to use OpenExeConfiguration
' using the configuration user level.
UsingConfigurationManager.GetRoamingConfiguration()
Exit Select
Case "2"
' Show how to use GetSection.
UsingConfigurationManager.CreateAppSettings()
Exit Select
Case "3"
' Show how to use AppSettings.
UsingConfigurationManager.ReadAppSettings()
Exit Select
Case "4"
' Show how to use OpenExeConfiguration
' using the configuration file path.
UsingConfigurationManager.GetAppConfiguration()
Exit Select
Case "5"
' Show how to use ConnectionStrings.
UsingConfigurationManager.ReadConnectionStrings()
Exit Select
Case "6"
' Show how to use OpenMappedExeConfiguration.
UsingConfigurationManager.MapExeConfiguration()
Exit Select
Case "7"
' Show how to use OpenMappedMachineConfiguration.
UsingConfigurationManager.MapMachineConfiguration()
Exit Select
Case Else
' DisplayUserMenu();
Exit Select
End Select
DisplayUserMenu()
Console.Write("> ")
selection = Console.ReadLine()
End While
End Sub
End Class
#End Region
End Namespace
Comments
- Anonymous
October 14, 2008
Introduction This post shows a console application that uses the ConfigurationManager class. The code - Anonymous
January 22, 2014
The comment has been removed