Partilhar via


Recuperando recursos em Assemblies Satélites

Idealmente, você deve empacotar os recursos para o padrão ou neutra assembly com o assembly principal e criar um assembly satélite separado para cada idioma que seu aplicativo suporta. O classe ResourceManager fornece acesso a recursos específicos da cultura em tempo de execução e controla como o aplicativo recupera os recursos usando o processo de fallback de recurso. Para obter mais informações, consulte o "processo de Fallback de recurso" subtópico na Empacotamento e implantação de recursos tópico. Incentivamos os recursos de acesso por meio de um dos construtores para o ResourceManager classe. Isso exige recursos para ser compilado em assemblies satélites, ou parte do assembly de principal do aplicativo.

O ResourceManager determina quais recursos para recuperar o thread atual como base a propriedade de CultureInfo.CurrentUICulture. Por exemplo, se um aplicativo é compilado com padrão de recursos do idioma inglês e dois assemblies de satélite que contém recursos para recursos de idioma francês e alemão e o CurrentUICulture for definida como "de" a ResourceManager recupera os recursos de alemão. Para obter mais informações sobre como definir o CurrentUICulture propriedade, consulte usando a propriedade CurrentUICulture.

O exemplo a seguir usa a o método de ResourceManager.GetString para recuperar e exibir um recurso de seqüência de caracteres.

…
Dim private rm As ResourceManager
rm = New ResourceManager("MyStrings", Me.GetType().Assembly)
Console.Writeline(rm.GetString("string1"))
…
…
private ResourceManager rm;
rm = new ResourceManager("MyStrings", this.GetType().Assembly);
Console.Writeline(rm.GetString("string1"));
…

Este código recupera e exibe string1 do arquivo MyStrings. A seqüência real que é carregada depende do segmento atual CurrentUICulture propriedade.

O exemplo a seguir usa a o método de ResourceManager.GetObject para recuperar e exibir um recurso binário (como uma imagem gráfica).

…
Dim private rm As ResourceManager
rm = New ResourceManager("MyImages", Me.GetType().Assembly)
PictureBox.Image = Ctype(rm.GetObject("MyObject"), System.Drawing.Image)
…
…
private ResourceManager rm;
rm = new ResourceManager("MyImages", this.GetType().Assembly);
PictureBox.Image = (System.Drawing.Image)rm.GetObject("MyObject");
…

Este código carrega o objeto chamado MyObject o arquivo de recurso, MyImages. Ele projeta MyObject para um imagem digite e atribui à propriedade image de PictureBox. O objeto real que é carregado depende do segmento atual CurrentUICulture propriedade.

O a classe de ResourceSet armazena todos os recursos localizados para uma cultura única. A ResourceSet não usa o processo de fallback de recurso. Portanto, um ResourceSet não é tão útil em aplicativos localizados.

Suporte de versionamento para Assemblies Satélites

Por padrão, quando o ResourceManager recupera solicitada recursos, ele procura os assemblies satélites com números de versão que corresponde ao número de versão do assembly principal. Depois de implantar um aplicativo, você talvez queira atualizar o assembly principal ou satélite de recurso específico. A.NET Framework oferece suporte para controle de versão do assembly principal e assemblies satélites.

O SatelliteContractVersionAttribute classe fornece suporte de versionamento para um assembly principal. Especificando a SatelliteContractVersionAttribute em um aplicativo assembly principal permite a você atuallizar e reimplantar um assembly principal sem atualizar seus assemblies satélites. Depois de atualizar o assembly principal, incrementar o número de versão do assembly principal mas deixe o número de versão contrato do satélite como está. Quando o ResourceManager recupera solicitada recursos, ele carregará a versão do assembly satélite especificada por este atributo.

Assemblies de diretiva do Publisher oferecem suporte para controle de versão assemblies satélites. Você pode atualizar e reimplantar um assembly satélite sem atualizar o assembly principal. Depois de atualizar um assembly satélite, incrementar seu número de versão e enviar junto com um assembly de diretiva de editor. No assembly da diretiva de editor, especificar que seu novo assembly satélite é compatível com sua versão anterior. Embora o ResourceManager usará o número da versão contrato satélite existente do assembly principal para recuperar os recursos solicitados, a versão atualizada correta do assembly será recuperada porque o carregador de assembly irá vincular para a versão do assembly satélite especificada no assembly de diretiva de editor. Para obter mais informações sobre assemblies de diretiva de editor, consulte a criação de um arquivo de diretiva de editor.

Para habilitar o suporte de versionamento de assembly completo, é recomendável que você implantar assemblies de nome forte no global assembly cache e implantar assemblies sem nomes de alta segurança no diretório de aplicativo. Se você desejar implantar assemblies de nome forte no diretório de aplicativo, não será capaz de incrementar o número de versão de um assembly satélite quando você atualiza o assembly. Em vez disso, você deve executar uma atualização no local onde você pode substituir o código existente com o código atualizado e manter o mesmo número de versão. Por exemplo, se você deseja atualizar a versão 1.0.0.0 de um assembly satélite com o nome de assembly totalmente especificado "myApp.resources, versão = 1.0.0.0, Culture = de, PublicKeyToken = b03f5f11d50a3a", substituí-lo com o myApp.resources.dll atualizada que foi compilado com o mesmo nome de assembly totalmente especificado "myApp.resources, versão = 1.0.0.0, Culture = de, PublicKeyToken = b03f5f11d50a3a". Observe que como o número de versão não pode ser incrementado, in-loco atualizações usando arquivos de assembly satélite torna difícil para um aplicativo determinar com precisão a versão de um assembly satélite.

Para obter mais informações sobre o controle de versão do assembly, consulte Versionamento de Assembly e Como o Runtime localiza Assemblies.

Consulte também

Referência

ResourceManager

Conceitos

Recursos em aplicativos

Empacotamento e implantação de recursos

Como o Runtime Localiza Assemblies

Recuperando recursos.Arquivos de recursos