VB.NET 2008 Scrittura settings di applicazione

Gli Application Settings sono in sola lettura e non è possibile modificarli e salvarli tramite My.Settings. Talvolta però nasce l’esigenza si porteli midificare si pensi ad esempio nel caso di sviluppo di tool in cui si voglia utilizzare il file confing per mantenere le impostazioni che devono essere uguali per tutti gli account utente.

Di seguito una semplice funzione per impostare un Setting con scope Application, per aggiornare i settings dopo aver scritto su file il valore sarà sufficiente invocare la My.Settings.Reload()

Public Shared Sub WriteApplicationSetting(ByVal settingName As String, ByVal value As String)
    Const sectionGroupName As String = “applicationSettings”
    Dim sectionName As String = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name & _
        “.My.MySettings”

    ‘Lettura configurazione
    Dim config = System.Configuration.ConfigurationManager.OpenExeConfiguration( _
        Configuration.ConfigurationUserLevel.None)

    ‘Ricerca sezione applicationSettings
    Dim applicationSettingsSection As System.Configuration.ClientSettingsSection = _
        DirectCast(config.SectionGroups(sectionGroupName).Sections(sectionName), System.Configuration.ClientSettingsSection)

    ‘Impostazione Valore
    applicationSettingsSection.Settings.Get(settingName).Value.ValueXml.InnerText = value
    applicationSettingsSection.SectionInformation.ForceSave = True

    ‘Salvataggio valore
    config.Save()

    ‘Refresh sezione per forzare la lettura da file
    System.Configuration.ConfigurationManager.RefreshSection(applicationSettingsSection.SectionInformation.SectionName)

    ‘Rilascio risorse
    applicationSettingsSection = Nothing
    config = Nothing
End Sub

In modo analogo è possibile scrivere una Setting di tipo ConnectionString

    Public Shared Sub WriteConnectionStringsSetting(ByVal name As String, ByVal value As String)
        Const sectionName As String = “connectionStrings”
        Dim connectionStringName As String = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name & _
            “.My.MySettings.” & name

        ‘Lettura configurazione
        Dim config = System.Configuration.ConfigurationManager.OpenExeConfiguration( _
            Configuration.ConfigurationUserLevel.None)

        ‘Ricerca sezione applicationSettings
        Dim connectionStringsSection As System.Configuration.ConnectionStringsSection = _
            DirectCast(config.Sections(sectionName), System.Configuration.ConnectionStringsSection)

        ‘Impostazione Valore
        connectionStringsSection.ConnectionStrings(connectionStringName).ConnectionString = value

        ‘Salvataggio valore
        config.Save()

        ‘Refresh configurazione per forzare lettura da file
        System.Configuration.ConfigurationManager.RefreshSection(connectionStringsSection.SectionInformation.SectionName)

        ‘Rilascio risorse
        connectionStringsSection = Nothing
        config = Nothing
    End Sub