Question

J'ai un ConfigurationSection personnalisé dans ma demande:

public class SettingsSection : ConfigurationSection
{
    [ConfigurationProperty("Setting")]
    public MyElement Setting
    {
        get
        {
            return (MyElement)this["Setting"];
        }
        set { this["Setting"] = value; }
    }
}

public class MyElement : ConfigurationElement
{
    public override bool IsReadOnly()
    {
        return false;
    }

    [ConfigurationProperty("Server")]
    public string Server
    {
        get { return (string)this["Server"]; }
        set { this["Server"] = value; }
    }
}

Dans mon web.config

  <configSections>
    <sectionGroup name="mySettingsGroup">
      <section name="Setting" 
               type="MyWebApp.SettingsSection"  
               requirePermission="false" 
               restartOnExternalChanges="true"
               allowDefinition="Everywhere"  />
    </sectionGroup>
  </configSections>

  <mySettingsGroup>
    <Setting>
      <MyElement Server="serverName" />
    </Setting>
  </mySettingsGroup>

La lecture de la section fonctionne très bien. La question que je vais avoir est que lorsque je lis la section via

var settings = (SettingsSection)WebConfigurationManager.GetSection("mySettingsGroup/Setting");

Et puis je passe à modifier la propriété Server:

   settings.Server = "something";

Cela ne modifie pas la propriété "Server" dans le fichier web.config.

Note: Ce doit travailler en moyenne confiance, donc je ne peux pas utiliser WebConfigurationManager.OpenWebConfiguration qui fonctionne très bien. Est-il un moyen explicite de dire la ConfigSection de se sauver?

Était-ce utile?

La solution

Courte réponse - non. équipe .NET étaient (soi-disant) destiné à résoudre ce problème en v4, mais il n'a pas eu lieu.

La raison en est parce que l'utilisation revient WebConfigurationManager.GetSection lecture seule NameValueCollections imbriquées, qui ne persistent pas lorsque vous modifiez leurs valeurs. En utilisant WebConfigurationManager.OpenWebConfiguration, comme vous avez tout à fait à juste titre assuré, est le seul moyen d'obtenir un accès lecture-écriture à la config - mais alors vous aurez une exception FileIOPermission jeté, comme des tentatives de OpenWebConfiguration pour charger toutes les configs héritées jusqu'à votre web.config - qui comprennent la machine-niveau web.config et les fichiers machine.config dans C:\WINDOWS\Microsoft.NET\Framework, qui sont explicitement

hors de portée moyenne Trust.

Réponse longue -. L'utilisation XDocument / XmlDocument et XPath pour obtenir / définir des valeurs de configuration

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top