Recursos em aplicativos .NET

Quase todos os aplicativos de qualidade de produção precisam usar recursos. Um recurso é todo dado não executável implantado de modo lógico com um aplicativo. Um recurso pode ser exibido em um aplicativo como mensagens de erro ou como parte da interface do usuário. Os recursos podem conter dados em vários formatos, incluindo cadeias de caracteres, imagens e objetos persistentes. (Para gravar objetos persistentes em um arquivo de recurso, os objetos precisam ser serializáveis). O armazenamento dos dados em um arquivo de recurso permite que você altere os dados sem recompilar todo o aplicativo. Também é possível armazenar dados em um único local e eliminar a necessidade de depender de dados embutidos em código que são armazenados em vários locais.

O .NET dá suporte abrangente para a criação e a localização de recursos. Além disso, o .NET dá suporte a um modelo simples de empacotamento e implantação de recursos localizados.

Criar e localizar recursos

Em um aplicativo não localizado, você pode usar arquivos de recurso como um repositório para dados de aplicativo, especialmente para cadeias de caracteres que poderiam ser de alguma forma embutidas em código em vários locais no código-fonte. Normalmente, você cria recursos como arquivos de texto (.txt) ou XML (.resx) e usa Resgen.exe (Gerador de Arquivo de Recurso) para compilá-los em arquivos de recursos binários. Esses arquivos podem ser inseridos no arquivo executável do aplicativo por um compilador de linguagem. Para obter mais informações de como criar recursos, confira Criar arquivos de recurso.

Você também pode localizar os recursos do seu aplicativo para culturas específicas. Isso permite que criar versões localizadas (traduzidas) dos aplicativos. Ao desenvolver um aplicativo que usa recursos localizados, você designa uma cultura que atua como a cultura neutra ou de fallback cujos recursos serão usados se não houver recursos adequados disponíveis. Normalmente, os recursos da cultura neutra são armazenados no executável do aplicativo. Os demais recursos para culturas localizadas individuais são armazenados nos assemblies satélite autônomos. Para saber mais, confira Criar assemblies satélite.

Empacotar e implantar recursos

Implante recursos de aplicativo localizados em assemblies satélite. Um assembly satélite contém os recursos de uma única cultura; ele não contém qualquer código de aplicativo. No modelo de implantação do assembly satélite, você cria um aplicativo com um assembly padrão (que geralmente é o assembly principal) e um assembly satélite para cada cultura com a qual o aplicativo é compatível. Como os assemblies satélite não fazem parte do assembly principal, você pode substituir ou atualizar facilmente os recursos correspondentes a uma cultura específica sem substituir o assembly principal do aplicativo.

Determine cuidadosamente quais recursos vão compor o assembly do recurso padrão do aplicativo. Como ele faz parte do assembly principal, qualquer mudança nele exigirá que você substitua o assembly principal. Caso você não forneça um recurso padrão, uma exceção será gerada quando o processo de fallback do recurso tentar encontrá-lo. Em um aplicativo bem projetado, o uso de recursos nunca deve gerar uma exceção.

Para saber mais, confira o artigo Empacotamento e implantação de recursos.

Recuperar recursos

No tempo de execução, um aplicativo carrega os recursos localizados apropriados por thread, com base na cultura especificada pela propriedade CultureInfo.CurrentUICulture. Esse valor da propriedade é derivado da seguinte maneira:

  • Atribuindo diretamente um objeto CultureInfo que representa a cultura localizada para a propriedade Thread.CurrentUICulture.

  • Se não houver uma cultura explicitamente designada, recuperando a cultura padrão da interface do usuário do thread pela propriedade CultureInfo.DefaultThreadCurrentUICulture.

  • Se uma cultura de interface do usuário do thread padrão não for explicitamente atribuída, recuperando a cultura para o usuário atual no computador local. As implementações do .NET em execução no Windows fazem isso ao chamar a função GetUserDefaultUILanguage do Windows.

Para saber mais sobre a configuração da cultura da interface do usuário atual, confira as páginas de referência CultureInfo e CultureInfo.CurrentUICulture.

Você pode recuperar recursos para a cultura da interface do usuário atual ou para uma cultura específica usando a classe System.Resources.ResourceManager. Embora a classe ResourceManager seja mais frequentemente usada para recuperar recursos, o namespace System.Resources contém tipos adicionais que podem ser usados para recuperar recursos. Estão incluídos:

  • A classe ResourceReader, que permite enumerar recursos inseridos em um assembly ou armazenados em um arquivo de recurso binário autônomo. Ela é útil quando você desconhece os nomes exatos dos recursos que estão disponíveis no tempo de execução.

  • A classe ResXResourceReader, que permite recuperar recursos de um arquivo XML (.resx).

  • A classe ResourceSet, que permite recuperar os recursos de uma cultura específica sem observar regras de fallback. Os recursos podem ser armazenados em um assembly ou em um arquivo de recursos binário autônomo. Você também pode desenvolver uma implementação IResourceReader que permite usar a classe ResourceSet para recuperar recursos de outra fonte.

  • A classe ResXResourceSet, que permite recuperar todos os itens em um arquivo de recurso XML na memória.

Confira também