Visão geral sobre configurações do aplicativo

Este artigo descreve como criar e armazenar dados de configurações em nome de seu aplicativo e seus usuários.

O recurso Configurações de Aplicativo dos Windows Forms facilita a criação, o repositório e a manutenção de aplicativos personalizados e preferências do usuário no computador cliente. Com as configurações de aplicativo dos Windows Forms, você pode armazenar não apenas dados do aplicativo, como cadeias de conexão de banco de dados, mas também dados específicos do usuário, como as preferências de aplicativo do usuário. Usando o Visual Studio ou um código gerenciado personalizado, você pode criar novas configurações, lê-las do disco e gravá-las nele, associá-las a propriedades em seus formulários e validar os dados das configurações antes de carregar e salvar.

As configurações do aplicativo permitem que os desenvolvedores salvem o estado em seu aplicativo usando muito pouco código personalizado e é um substituto para as propriedades dinâmicas em versões anteriores do .NET Framework. As configurações de aplicativo contêm muitas melhorias com relação às propriedades dinâmicas, que são somente leitura, têm associação tardia e exigem mais programação personalizada. As classes de propriedade dinâmica foram mantidas no .NET Framework 2.0, mas são apenas classes de shell que encapsulam finamente as classes de configurações do aplicativo.

O que são configurações do aplicativo

Seus aplicativos do Windows Forms geralmente exigirão dados críticos para executar o aplicativo, mas que você não deseja incluir diretamente no código do aplicativo. Se seu aplicativo usa um serviço Web ou um servidor de banco de dados, convém armazenar essas informações em um arquivo separado, para que você possa alterá-lo no futuro sem recompilar. Da mesma forma, seus aplicativos podem exigir o armazenamento de dados que são específicos ao usuário atual. A maioria dos aplicativos, por exemplo, tem preferências do usuário que personalizam a aparência e o comportamento do aplicativo.

As configurações de aplicativo abordam essas duas necessidades fornecendo uma maneira fácil de armazenar configurações de escopo do aplicativo e de escopo do usuário no computador cliente. Usando o Visual Studio ou um editor de código, você define uma configuração para uma determinada propriedade especificando seu nome, tipo de dados e escopo (aplicativo ou usuário). Você pode até mesmo colocar configurações relacionadas em grupos nomeados para facilitar o uso e a legibilidade. Uma vez definidas, essas configurações são mantidas e lidas na memória automaticamente em tempo de execução. Uma arquitetura conectável permite que o mecanismo de persistência seja alterado, mas, por padrão, o sistema de arquivos local é usado.

As configurações de aplicativo funcionam gravando dados como XML em arquivos de configuração (.config) diferentes, que indicam se a configuração tem escopo do aplicativo ou escopo do usuário. Na maioria dos casos, as configurações de escopo do aplicativo são somente leitura. Como elas são informações sobre o programa, normalmente você não precisará substituí-las. Por outro lado, as configurações de escopo do usuário poderão ser lidas e gravadas com segurança em tempo de execução, mesmo se seu aplicativo for executado com confiança parcial. Para obter mais informações sobre a confiança parcial, consulte Visão geral da segurança dos Windows Forms.

As configurações são armazenadas como fragmentos XML em arquivos de configuração. Configurações com escopo do aplicativo são representadas pelo elemento <applicationSettings> e geralmente são colocadas em app.exe.config, em que app é o nome do seu arquivo executável principal. As configurações de escopo do <userSettings> usuário são representadas pelo elemento e são colocadas em user.config. Você deve implantar o arquivo app.exe.config com seu aplicativo, a arquitetura de configurações criará o arquivo user.config sob demanda na primeira vez que o aplicativo salvar as configurações para esse usuário. Você também pode definir um bloco <userSettings> em app.exe.config para fornecer valores padrão para configurações com escopo do usuário.

Os controles personalizados também podem salvar suas próprias configurações implementando a IPersistComponentSettings interface, que expõe o SaveSettings método. O controle Windows Forms ToolStrip implementa essa interface para salvar a posição de barras de ferramentas e itens de barra de ferramentas entre sessões de aplicativo. Para obter mais informações sobre controles personalizados e configurações do aplicativo, consulte Configurações do aplicativo para controles personalizados.

Onde as configurações de escopo do usuário são armazenadas

O provedor padrão, , LocalFileSettingsProviderarmazena configurações de escopo do LocalApplicationData usuário na pasta. Se essa pasta não estiver disponível, a ApplicationData pasta será usada. Uma subpasta específica do aplicativo é criada para armazenar o arquivo de configurações com escopo do usuário. O nome dessa pasta é baseado em três atributos sobre o assembly principal do aplicativo:

  • A assembleia é CompanyName.
  • Um valor hash baseado em duas informações:
    • A assembleia é FriendlyName. Se FriendlyName não estiver disponível, o ProductName é usado.
    • O assembly está StrongName disponível, caso contrário, o caminho absoluto da pasta para o assembly será usado.
  • A AssemblyName.Version cadeia de caracteres.

Se qualquer um dos detalhes do assembly anterior for alterado, as configurações de escopo do usuário anteriores serão perdidas porque um novo nome de subpasta será gerado. Por exemplo, se uma nova versão do aplicativo for lançada e o AssemblyName.Version valor for diferente da versão anterior, o nome da subpasta usada para armazenar as configurações de escopo do usuário será alterado. Se as configurações do usuário precisarem persistir entre as versões do aplicativo, crie um provedor de configurações personalizadas. Para obter mais informações, consulte Provedores de configurações personalizadas.

Limitações das configurações de aplicativo

Você não pode usar configurações de aplicativo em um aplicativo não gerenciado que hospeda o .NET Framework. As configurações não funcionam em ambientes como suplementos do Visual Studio, C++ para Microsoft Office, hospedagem de controles no Internet Explorer ou projetos e suplementos do Microsoft Outlook.

Atualmente, não é possível associar a algumas propriedades nos Windows Forms. O exemplo mais notável é a propriedade, pois a vinculação a ClientSize essa propriedade causaria um comportamento imprevisível em tempo de execução. Geralmente, você pode contornar esses problemas salvando e carregando essas configurações programaticamente.

As configurações de aplicativo não têm nenhum recurso interno para criptografar informações automaticamente. Você nunca deve armazenar informações relacionadas à segurança, como senhas de banco de dados, em texto não criptografado. Se quiser armazenar esse tipo de informações confidenciais, você, como desenvolvedor de aplicativos, será responsável por garantir sua segurança. Se quiser armazenar cadeias de conexão, recomendamos que você use a Segurança Integrada do Windows e não recorra ao hard-coding de senhas na URL. Para obter mais informações, consulte Segurança de acesso do código e ADO.NET.

Introdução às Configurações de Aplicativo

Se usar o Visual Studio, você poderá definir configurações dentro do Designer de Formulários do Windows usando a propriedade (ApplicationSettings) na janela Propriedades. Quando você define configurações dessa maneira, o Visual Studio cria automaticamente uma classe wrapper gerenciada personalizada que associa cada configuração a uma propriedade de classe. O Visual Studio também cuida da associação da configuração a uma propriedade em um formulário ou controle, de modo que as configurações do controle sejam restauradas automaticamente quando seu formulário é exibido e sejam salvas automaticamente quando o formulário é fechado.

Se quiser controlar de forma mais detalhada as configurações, você poderá definir sua própria classe wrapper de configurações de aplicativo personalizada. Isso é feito derivando uma classe de ApplicationSettingsBase, adicionando uma propriedade que corresponde a cada configuração e aplicando atributos especiais a essas propriedades. Para obter detalhes sobre como criar classes wrapper, consulte Arquitetura das configurações do aplicativo.

Você também pode usar a classe para vincular configurações programaticamente a Binding propriedades em formulários e controles.

Confira também