Recuperar recursos en ensamblados satélite
Actualización: noviembre 2007
Lo ideal es empaquetar los recursos del ensamblado predeterminado o neutro con el ensamblado principal y crear un ensamblado satélite independiente para cada idioma que admita la aplicación. La clase ResourceManager proporciona acceso a los recursos específicos de la referencia cultural en tiempo de ejecución y controla cómo la aplicación recupera los recursos mediante el proceso de reserva de recursos. Para obtener más información, vea el subtema "Proceso de reserva de recursos" del tema Empaquetar e implementar recursos. Se recomienda obtener acceso a los recursos mediante uno de los constructores de la clase ResourceManager. Esto requiere que los recursos estén compilados en ensamblados satélite o que formen parte del ensamblado principal de la aplicación.
ResourceManager determina qué recursos se van a recuperar basándose en la propiedad CultureInfo.CurrentUICulture del actual subproceso. Por ejemplo, si se compila una aplicación con los recursos predeterminados del idioma inglés y dos ensamblados satélite que contienen recursos de los idiomas francés y alemán, y la propiedad CurrentUICulture se establece en "de", ResourceManager recuperará los recursos del idioma alemán. Para obtener más información sobre cómo se establece la propiedad CurrentUICulture, vea Usar la propiedad CurrentUICulture.
En el siguiente ejemplo se utiliza el método ResourceManager.GetString para recuperar y mostrar un recurso de cadena.
…
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 y muestra string1 del archivo MyStrings. La cadena real que se cargue depende de la propiedad CurrentUICulture del actual subproceso.
En el siguiente ejemplo se utiliza el método ResourceManager.GetObject para recuperar y mostrar un recurso binario (por ejemplo, una imagen 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 carga el objeto denominado MyObject del archivo de recursos MyImages. Convierte MyObject en un tipo Image y lo asigna a la propiedad Image de PictureBox. El objeto real que se cargue depende de la propiedad CurrentUICulture del actual subproceso.
La clase ResourceSet almacena todos los recursos localizados para una sola referencia cultural. Una clase ResourceSet no utiliza el proceso de reserva de recursos. Por ello, ResourceSet no resulta tan útil en aplicaciones localizadas.
Compatibilidad entre las versiones de los ensamblados satélite
De manera predeterminada, cuando ResourceManager recupera los recursos solicitados, busca ensamblados satélite cuyo número de versión coincida con el del ensamblado principal. Tras implementar una aplicación, quizá desee actualizar el ensamblado principal o determinados ensamblados satélite de recursos. .NET Framework admite el control de versiones del ensamblado principal y de los ensamblados satélite.
La clase SatelliteContractVersionAttribute admite el control de versiones para el ensamblado principal. Si se especifica SatelliteContractVersionAttribute en el ensamblado principal de una aplicación, se podrá actualizar y volver a implementar un ensamblado principal sin tener que actualizar sus ensamblados satélite. Tras actualizar el ensamblado principal, incremente su número de versión pero no modifique el número de versión del contrato satélite. Cuando ResourceManager recupere los recursos solicitados, cargará la versión de ensamblado satélite especificada por este atributo.
Los ensamblados de directivas del editor admiten el control de versiones para los ensamblados satélite. Se puede actualizar y volver a implementar un ensamblado satélite sin tener que actualizar el ensamblado principal. Tras actualizar un ensamblado satélite, incremente su número de versión e inclúyalo en un ensamblado de directiva de editor. En el ensamblado de directiva de editor, especifique que el nuevo ensamblado satélite es compatible con su versión anterior. Si bien ResourceManager utilizará el número de versión del contrato satélite existente del ensamblado principal para recuperar los recursos solicitados, se recuperará la versión actualizada correcta del ensamblado ya que el cargador de ensamblados se enlazará con la versión de ensamblado satélite especificada en el ensamblado de directivas del editor. Para obtener más información sobre los ensamblados de directivas del editor, vea Crear un archivo en una directiva de editor.
Para habilitar la compatibilidad completa con el control de versiones de los ensamblados, se recomienda implementar ensamblados con nombre seguro en la caché de ensamblados global e implementar ensamblados sin nombre seguro en el directorio de la aplicación. Si desea implementar ensamblados con nombre seguro en el directorio de la aplicación, no podrá aumentar el número de versión de un ensamblado satélite al actualizar el ensamblado. Deberá realizar una actualización en contexto en el lugar donde reemplaza el código existente con el código actualizado y mantener el mismo número de versión. Por ejemplo, si desea actualizar la versión 1.0.0.0 de un ensamblado satélite con el nombre de ensamblado completamente especificado "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a", reemplácelo con el archivo myApp.resources.dll actualizado que se ha compilado con el nombre de ensamblado completamente especificado "myApp.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=b03f5f11d50a3a". Dado que no se puede incrementar el número de versión, el uso de actualizaciones en contexto en los archivos de ensamblado satélite dificulta a una aplicación la tarea de determinar la versión de un ensamblado satélite.
Para obtener más información acerca del control de versiones de los ensamblados, vea Control de versiones de los ensamblados y Cómo el motor en tiempo de ejecución ubica ensamblados.
Vea también
Conceptos
Empaquetar e implementar recursos
Cómo el motor en tiempo de ejecución ubica ensamblados
Recuperar recursos en archivos .Resources