seção de configuração Modificar programação em confiança média
-
27-10-2019 - |
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?
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 NameValueCollection
s 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