Sharing Config File Setting

Posted on 2009-05-17
Last Modified: 2012-05-07
Hi Experts,
I've few application which share same settings. They all located at different folders. Some of the application are running as com dll so App.exe.config refers to the diff app name at run time.

Is there a way to use only 1 config file and shared by all the applications and com dlls? This will also simplify the process of maintaining too many config files with same settings.

Question by:pcssecure
  • 2
LVL 13

Expert Comment

ID: 24406155
For more flexibility with settings I use xml serialization and a custom settings class.  You can then serialize the class to disk in a controlled location.

I normally get the application data folder and append the appropriate path which can be done similar to the SettingsLocation function below.   You can change AllUsersApplicationData to CurrentUserApplicationData for user specific settings.

Word to the wise use the ApplicationData location if you want your application to act nice with Vista.
Public Class MySettings


Private _Value1 as string

Property Value1 as string


 return _value1

end get

set (byval value as string)

 _value1 = value

end set

end property



Public Sub SerializeToXML (byval path as string)

'there is a nice snippet under XML for this



Public Shared Sub ReadXML (byval Path as string) as MySettings




Public Shared Function SettingsLocation () as string

        Dim fileLocation As String = My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData

        fileLocation = IO.Path.GetDirectoryName(fileLocation)

        fileLocation = IO.Path.GetDirectoryName(fileLocation)

        fileLocation = IO.Path.GetDirectoryName(fileLocation)

fileLocation = io.path.combine(filelocation,"MyAppDirectory\MySettingsFileName.xml"

end sub

end class

Open in new window


Author Comment

ID: 24406478
Hi Corey,
Thanks for the response.

To be more precise, I only need to read the settings.

It would be more helpful if could give me some working sample code.

LVL 13

Accepted Solution

Corey2 earned 500 total points
ID: 24406998
Even if you only need to read the settings it is nice to have a default xml created this example creates the xml if it doesn't exist. All you would have to do is modify the MySettings class to have a property for each setting you want.  The properties can also be classes as long as all the types are serializable.  (windows controls are not serializable)  anything you don't need to be serialized you can add an attribute of <System.Xml.Serialization.XmlIgnore()>
Imports System.Configuration

Imports System.Xml.Serialization

Imports System.IO

Public Class Form1

    Private _Stgs As MySettings = Nothing

    Public Property Stgs() As MySettings


            Return _Stgs

        End Get

        Set(ByVal value As MySettings)

            _Stgs = value

        End Set

    End Property

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Dim cs As ConnectionStringSettings

        'Dim bldTestDB As New System.Data.Common.DbConnectionStringBuilder



        If My.Computer.FileSystem.FileExists(MySettings.SettingsLocation) Then

            Stgs = MySettings.ReadXML(MySettings.SettingsLocation)


            Stgs = New MySettings


        End If

        Me.TextBox1.Text = Stgs.Value1

        Me.TextBox2.Text = String.Format("The Settings are saved to: {0}", MySettings.SettingsLocation)

    End Sub

End Class

Public Class MySettings

    Private _Value1 As String = "This is the Default Value"

    Property Value1() As String


            Return _value1

        End Get

        Set(ByVal value As String)

            _value1 = value

        End Set

    End Property

    Public Sub SerializeToXML(ByVal path As String)

        'there is a nice snippet under XML for this

        Dim writer As New XmlSerializer(GetType(MySettings))


        Dim file As New StreamWriter(path)

        writer.Serialize(file, Me)



    End Sub

    Public Shared Function ReadXML(ByVal Path As String) As MySettings


        Dim reader = New XmlSerializer(GetType(MySettings))

        Dim file = New StreamReader(Path)

        Dim fileData = CType(reader.Deserialize(file), MySettings)



        Return fileData

    End Function

    Public Shared Function SettingsLocation() As String

        Dim fileLocation As String = My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData

        fileLocation = IO.Path.GetDirectoryName(fileLocation)

        fileLocation = IO.Path.GetDirectoryName(fileLocation)

        fileLocation = IO.Path.GetDirectoryName(fileLocation)

        fileLocation = IO.Path.Combine(fileLocation, "MyAppDirectory\MySettingsFileName.xml")

        Return fileLocation

    End Function

Open in new window


Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
As soon as i click a button on the form,it mnimises. 11 30
Unable  to create new object 9 38
Populating an array of locale_time_info 8 37 2010 11 22
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…

912 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now