Eu tenho que derivam de ConfigurationSection para as configurações de suporte por usuário?
-
06-07-2019 - |
Pergunta
Eu estou brincando com suporte de configuração do .NET (a classe ConfigurationManager e aulas de apoio relacionados). Eu gostaria de escrever um aplicativo que, uma vez instalado:
- Tem configurações padrão no foo.exe.config (em Arquivos de Programas).
- O usuário pode depois substituir as configurações com valores não padrão, que deve ser mantida.
- preferências do usuário deve ser mantida no perfil do usuário, desde que ele não deve ter permissões de gravação para o diretório Arquivos de Programas.
O aplicativo deve usar as preferências do usuário quando está pronto, caso contrário, utilizar os padrões.
Parece que este deve ser fácil - é um padrão muito comum. Mas minhas tentativas de este estiver executando em colisões e eu estou querendo saber se eu estou tomando a abordagem correta.
O seguinte código produz a excepção de tempo de execução "propriedades ConfigurationSection não pode ser editada quando bloqueado".
using System;
using System.Configuration;
namespace DemoAppSettingsProblem
{
class Program
{
static void Main(string[] args)
{
Configuration userConfig =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
if ( userConfig.AppSettings.Settings["foo"] != null )
userConfig.AppSettings.Settings.Remove("foo");
userConfig.AppSettings.Settings.Add("foo", "The string is foo.");
userConfig.Save(ConfigurationSaveMode.Modified); // exception!
}
}
}
O problema é que a seção <appSettings>
definido pelo .NET é declarada com o allowExeDefinition=MachineToApplication
padrão (ver este belo post por Irena Kennedy da Microsoft). Esta proíbe a secção de ser escrito para o perfil do usuário (local ou em roaming).
Assim, presumo eu preciso definir minha própria seção, com allowExeDefinition=MachineToLocalUser
. Mas, tanto quanto eu posso dizer da documentação do MSDN, isso significa que eu preciso para criar minha própria classe de configuração, derivado de ConfigurationSection
. Os exemplos não me aponte na direção mais trabalho do que eu estava esperando, que geralmente define fora meus sinos de alarme que eu estou fazendo algo errado.
É realmente tão difícil de conseguir isso? Existe uma maneira simples .NET fornece para apoiar isso, ou eu deveria talvez ser tomar uma abordagem completamente diferente?
Solução
Eu usei o recurso de configurações, ele grava as configurações de usuário para a configuração do aplicativo para você ...
http://msdn.microsoft.com/ en-us / library / aa730869 (VS.80) .aspx
Outras dicas
Assumindo que você está no .NET 2.0 e superior, você tem verificado os arquivos "Configurações"? Aqueles estão sendo armazenados dentro do seu app.config -. Configurações do aplicativo em seções <applicationSettings>
, configurações definíveis pelo usuário em allowExeDefinition=MachineToLocalUser
Talvez isso poderia ser uma abordagem? Essas configurações de usuário são um tipo definido, o que você poderia definitivamente reutilização sob um nome diferente, se necessário ( "MySettings").
Marc