Solved

Sharing Config File Setting

Posted on 2009-05-17
3
255 Views
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.

Regards
PS
0
Comment
Question by:pcssecure
  • 2
3 Comments
 
LVL 13

Expert Comment

by:Corey2
Comment Utility
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

get

 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

'snippet

.....

 

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

0
 

Author Comment

by:pcssecure
Comment Utility
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.

Regards
-PS
0
 
LVL 13

Accepted Solution

by:
Corey2 earned 500 total points
Comment Utility
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

        Get

            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

        'bldTestDB.ConnectionString

        'cs.ConnectionString

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

            Stgs = MySettings.ReadXML(MySettings.SettingsLocation)

        Else

            Stgs = New MySettings

            Stgs.SerializeToXML(MySettings.SettingsLocation)

        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

        Get

            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))

        My.Computer.FileSystem.CreateDirectory(IO.Path.GetDirectoryName(path))

        Dim file As New StreamWriter(path)

        writer.Serialize(file, Me)

        file.Close()

        file.Dispose()

    End Sub
 

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

        'snippet

        Dim reader = New XmlSerializer(GetType(MySettings))

        Dim file = New StreamReader(Path)

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

        file.Close()

        file.Dispose()

        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

0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

744 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

16 Experts available now in Live!

Get 1:1 Help Now