Pergunta

Eu tenho um ConfigurationSection costume no meu aplicativo:

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; }
    }
}

Na minha 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>

A leitura da seção fina funciona. O problema que estou tendo é que quando eu ler a seção via

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

E então devo proceder para modificar a propriedade Server:

   settings.Server = "something";

Isto não modificar a propriedade "Servidor" no arquivo web.config.

Nota: Isso precisa trabalhar sob médio confiança, então não posso usar WebConfigurationManager.OpenWebConfiguration que funciona bem. Existe uma maneira explícita para contar a ConfigSection para se salvar?

Foi útil?

Solução

resposta curta - não. equipe .NET foram (supostamente) destinadas a corrigir isso em v4, mas isso não aconteceu.

A razão é porque usando WebConfigurationManager.GetSection retornos NameValueCollections somente leitura aninhados, que não persistem quando você mudar seus valores. Usando WebConfigurationManager.OpenWebConfiguration, como você muito bem determinado, é a única maneira de obter acesso de leitura e gravação para a configuração - mas então você vai ter uma exceção FileIOPermission jogado, como tentativas OpenWebConfiguration para carregar todas as configurações herdadas para baixo a sua web.config - que incluem os arquivos web.config e machine.config no nível da máquina em C:\WINDOWS\Microsoft.NET\Framework, que são explicitamente fora do âmbito da confiança média

.

Long resposta -. Uso XDocument / XmlDocument e XPath para obter / valores de configuração definidos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top