Compartir a través de


Resgen.exe (Generador de archivos de recursos)

El generador de archivos de recursos (Resgen.exe) convierte archivos de texto (.txt o .restext) y archivos de formato de recursos basados en XML (.resx) en archivos binarios (.resources) de Common Language Runtime que se pueden incrustar en un ensamblado binario binario o satélite en tiempo de ejecución. Para obtener más información, consulte Creación de archivos de recursos.

Resgen.exe es una utilidad de conversión de recursos de uso general que realiza las siguientes tareas:

  • Convierte .txt o archivos .restext en archivos .resources o .resx. (El formato de los archivos .restext es idéntico al formato de los archivos .txt. Sin embargo, la extensión .restext le ayuda a identificar archivos de texto que contienen definiciones de recursos más fácilmente).

  • Convierte los archivos .resources en archivos text o .resx.

  • Convierte los archivos .resx en archivos de texto o .resources.

  • Extrae los recursos de cadena de un ensamblado en un archivo .resw adecuado para su uso en una aplicación de la Tienda Windows 8.x.

  • Crea una clase fuertemente tipada que proporciona acceso a recursos con nombre individuales y a la ResourceManager instancia.

Si Resgen.exe produce un error por cualquier motivo, el valor devuelto es -1.

Para obtener ayuda con Resgen.exe, puede usar el siguiente comando, sin opciones especificadas, para mostrar la sintaxis y las opciones del comando para Resgen.exe:

resgen

También puede usar el /? modificador:

resgen /?

Si usa Resgen.exe para generar archivos .resources binarios, puede usar un compilador de lenguaje para insertar los archivos binarios en ensamblados ejecutables o puede usar Assembly Linker (Al.exe) para compilarlos en ensamblados satélite.

Esta herramienta se instala automáticamente con Visual Studio. Para ejecutar la herramienta, use el símbolo del sistema para desarrolladores de Visual Studio o Visual Studio Developer PowerShell.

En el símbolo del sistema, escriba lo siguiente:

Syntax

resgen  [-define:symbol1[,symbol2,...]] [/useSourcePath] filename.extension  | /compile filename.extension... [outputFilename.extension] [/r:assembly] [/str:lang[,namespace[,class[,file]]] [/publicclass]]
resgen filename.extension [outputDirectory]

Parámetros

Parámetro o modificador Description
/define: symbol1[, symbol2,...] A partir de .NET Framework 4.5, admite la compilación condicional en archivos de recursos basados en texto (.txt o .restext). Si el símbolo corresponde a un símbolo incluido en el archivo de texto de entrada dentro de una #ifdef construcción, el recurso de cadena asociado se incluye en el archivo .resources. Si el archivo de texto de entrada incluye una #if ! instrucción con un símbolo que no está definido por el /define modificador, el recurso de cadena asociado se incluye en el archivo de recursos.

/define se omite si se usa con archivos que no son de texto. Los símbolos distinguen mayúsculas de minúsculas.

Para obtener más información sobre esta opción, consulte Compilación condicional de recursos más adelante en este tema.
useSourcePath Especifica que el directorio actual del archivo de entrada se usará para resolver rutas de acceso de archivo relativas.
/compile Permite especificar varios archivos .resx o de texto para convertir en varios archivos .resources en una sola operación masiva. Si no especifica esta opción, solo puede especificar un argumento de archivo de entrada. Los archivos de salida se denominan filename.resources.

Esta opción no se puede usar con la /str: opción .

Para obtener más información sobre esta opción, vea Compilar o convertir varios archivos más adelante en este tema.
/r: assembly Hace referencia a los metadatos del ensamblado especificado. Se usa al convertir archivos .resx y permite que Resgen.exe serializar o deserializar recursos de objeto. Es similar a las opciones o /r: de los /reference: compiladores de C# y Visual Basic.
filename.extension Especifica el nombre del archivo de entrada que se va a convertir. Si usa la primera sintaxis de línea de comandos más larga presentada antes de esta tabla, extension debe ser una de las siguientes:

.txt o .restext
Un archivo de texto que se va a convertir en un archivo .resources o .resx. Los archivos de texto solo pueden contener recursos de cadena. Para obtener información sobre el formato de archivo, vea la sección "Recursos en archivos de texto" de Creación de archivos de recursos.

.resx
Un archivo de recursos basado en XML que se va a convertir en un archivo .resources o de texto (.txt o .restext).

.Recursos
Un archivo de recursos binarios que se va a convertir en un archivo .resx o de texto (.txt o .restext).

Si usa la segunda sintaxis de línea de comandos más corta presentada antes de esta tabla, extension debe ser la siguiente:

.exe o .dll
Un ensamblado de .NET Framework (ejecutable o biblioteca) cuyos recursos de cadena se van a extraer a un archivo .resw para su uso en el desarrollo de aplicaciones de la Tienda Windows 8.x.
outputFilename.extension Especifica el nombre y el tipo del archivo de recursos que se va a crear.

Este argumento es opcional al convertir de un archivo .restexto de .txt, .restext o .resx a un archivo .resources. Si no especifica outputFilename, Resgen.exe anexa una extensión .resources a la entrada filename y escribe el archivo en el directorio que contiene filename,extension.

El outputFilename.extension argumento es obligatorio al convertir desde un archivo .resources. Especifique un nombre de archivo con la extensión .resx al convertir un archivo .resources en un archivo de recursos basado en XML. Especifique un nombre de archivo con la extensión .txt o .restext al convertir un archivo .resources en un archivo de texto. Debe convertir un archivo .resources en un archivo .txt solo cuando el archivo .resources solo contiene valores de cadena.
outputDirectory En el caso de las aplicaciones de la Tienda Windows 8.x, especifica el directorio en el que se escribirá un archivo .resw que contiene los recursos de cadena de filename.extension . outputDirectory ya debe existir.
/str: language[,namespace[,classname[,filename]]] Crea un archivo de clase de recursos fuertemente tipado en el lenguaje de programación especificado en la language opción . language puede constar de uno de los siguientes literales:

- Para C#: c#, cso csharp.
- Para Visual Basic: vb o visualbasic.
- Para VBScript: vbs o vbscript.
- Para C++: c++, mco cpp.
- Para JavaScript: js, jscripto javascript.

La namespace opción especifica el espacio de nombres predeterminado del proyecto, la classname opción especifica el nombre de la clase generada y la filename opción especifica el nombre del archivo de clase.

La /str: opción solo permite un archivo de entrada, por lo que no se puede usar con la /compile opción .

Si namespace se especifica pero classname no, el nombre de clase se deriva del nombre del archivo de salida (por ejemplo, los caracteres de subrayado se sustituyen por puntos). Los recursos fuertemente tipados podrían no funcionar correctamente como resultado. Para evitar esto, especifique tanto el nombre de clase como el nombre del archivo de salida.

Para obtener más información sobre esta opción, vea Generar una clase de recursos fuertemente tipada más adelante en este tema.
/publicClass Crea una clase de recurso fuertemente tipada como una clase pública. De forma predeterminada, la clase de recurso está internal en C# y Friend en Visual Basic.

Esta opción se omite si no se usa la /str: opción.

tipos de archivo de recursos y Resgen.exe

Para que Resgen.exe convierta correctamente los recursos, los archivos .resx y texto deben seguir el formato correcto.

Archivos text (.txt y .restext)

Los archivos Text (.txt o .restext) solo pueden contener recursos de cadena. Los recursos de cadena son útiles si está escribiendo una aplicación que debe tener cadenas traducidas a varios idiomas. Por ejemplo, puede regionalizar fácilmente las cadenas de menú mediante el recurso de cadena adecuado. Resgen.exe lee los archivos de texto que contienen pares nombre-valor, donde el nombre es una cadena que describe el recurso y el valor es la propia cadena de recursos.

Nota:

Para obtener información sobre el formato de los archivos .txt y .restext, vea la sección "Recursos en archivos de texto" de Creación de archivos de recursos.

Un archivo de texto que contenga recursos debe guardarse con codificación UTF-8 o Unicode (UTF-16), a menos que contenga solo caracteres en el intervalo latino básico (a U+007F). Resgen.exe quita caracteres ANSI extendidos cuando procesa un archivo de texto que se guarda mediante la codificación ANSI.

Resgen.exe comprueba el archivo de texto para los nombres de recursos duplicados. Si el archivo de texto contiene nombres de recursos duplicados, Resgen.exe emitirá una advertencia y omitirá el segundo valor.

Archivos .resx

El formato de archivo de recursos .resx consta de entradas XML. Puede especificar recursos de cadena dentro de estas entradas XML, como lo haría en los archivos de texto. Una ventaja principal de los archivos .resx sobre los archivos de texto es que también puede especificar o insertar objetos. Al ver un archivo .resx, puede ver la forma binaria de un objeto incrustado (por ejemplo, una imagen) cuando esta información binaria forma parte del manifiesto de recursos. Al igual que con los archivos de texto, puede abrir un archivo .resx con un editor de texto (como bloc de notas o Microsoft Word) y escribir, analizar y manipular su contenido. Tenga en cuenta que esto requiere un buen conocimiento de las etiquetas XML y la estructura de archivos .resx. Para obtener más información sobre el formato de archivo .resx, consulte la sección "Recursos en archivos .resx" de Creación de archivos de recursos.

Para crear un archivo .resources que contenga objetos no de cadena incrustados, debe usar Resgen.exe para convertir un archivo .resx que contenga objetos o agregar los recursos de objeto al archivo directamente desde el código llamando a los métodos proporcionados por la ResourceWriter clase .

Si el archivo .resx o .resources contiene objetos y usa Resgen.exe para convertirlo en un archivo de texto, todos los recursos de cadena se convertirán correctamente, pero los tipos de datos de los objetos que no son de cadena también se escribirán en el archivo como cadenas. Perderá los objetos incrustados en la conversión y Resgen.exe notificará que se produjo un error al recuperar los recursos.

Conversión entre tipos de archivo de recursos

Al convertir entre distintos tipos de archivo de recursos, es posible que Resgen.exe no puedan realizar la conversión o que pierdan información sobre recursos específicos, en función de los tipos de archivo de origen y de destino. En la tabla siguiente se especifican los tipos de conversiones que se realizan correctamente al convertir de un tipo de archivo de recursos a otro.

Conversión desde Para el archivo de texto Para el archivo .resx Para el archivo .resw Para el archivo .resources
Archivo Text (.txt o .restext) -- Sin problemas No está soportado Sin problemas
Archivo .resx Se produce un error en la conversión si el archivo contiene recursos que no son de cadena (incluidos los vínculos de archivo) -- No compatible* Sin problemas
Archivo .resources Se produce un error en la conversión si el archivo contiene recursos que no son de cadena (incluidos los vínculos de archivo) Sin problemas No está soportado --
ensamblado de .exe o .dll No está soportado No está soportado Solo los recursos de cadena (incluidos los nombres de ruta de acceso) se reconocen como recursos. No está soportado

*En las aplicaciones de la Tienda Windows 8.x, usas archivos .resw para crear recursos. A pesar de la diferencia de extensión de archivo, el formato de archivo .resw es idéntico al formato de archivo .resx, excepto que los archivos .resw pueden contener solo cadenas y rutas de acceso de archivo. Puede convertir archivos .resx que contengan solo cadenas y rutas de acceso de archivo en archivos .resw cambiando simplemente la extensión de archivo.

Realización de tareas de Resgen.exe específicas

Puede usar Resgen.exe de diversas maneras: para compilar un archivo de recursos basado en texto o basado en XML en un archivo binario, convertir entre formatos de archivo de recursos y generar una clase que encapsula ResourceManager la funcionalidad y proporciona acceso a los recursos. En esta sección se proporciona información detallada sobre cada tarea:

Compilar recursos en un archivo binario

El uso más común de Resgen.exe es compilar un archivo de recursos basado en texto (un archivo de .txt o .restext) o un archivo de recursos basado en XML (un archivo .resx) en un archivo .resources binario. A continuación, el archivo de salida se puede incrustar en un ensamblado principal mediante un compilador de lenguaje o en un ensamblado satélite mediante Assembly Linker (AL.exe).

La sintaxis para compilar un archivo de recursos es:

resgen inputFilename [outputFilename]

donde los parámetros son:

inputFilename Nombre de archivo, incluida la extensión, del archivo de recursos que se va a compilar. Resgen.exe solo compila archivos con extensiones de .txt, .restext o .resx.

outputFilename Nombre del archivo de salida. Si omite outputFilename, Resgen.exe crea un archivo .resources con el nombre de archivo raíz de inputFilename en el mismo directorio que inputFilename. Si outputFilename incluye una ruta de acceso de directorio, el directorio debe existir.

Proporcione un espacio de nombres completo para el archivo .resources al especificarlo en el nombre de archivo y separarlo del nombre de archivo raíz por un punto. Por ejemplo, si outputFilename es MyCompany.Libraries.Strings.resources, el espacio de nombres es MyCompany.Libraries.

El comando siguiente lee los pares nombre-valor en Resources.txt y escribe un archivo .resources binario denominado Resources.resources. Dado que el nombre del archivo de salida no se especifica explícitamente, recibe el mismo nombre que el archivo de entrada de forma predeterminada.

resgen Resources.txt

El comando siguiente lee los pares nombre-valor en Resources.restext y escribe un archivo de recursos binario denominado StringResources.resources.

resgen Resources.restext StringResources.resources

El siguiente comando lee un archivo de entrada basado en XML denominado Resources.resx y escribe un archivo .resources binario denominado Resources.resources.

resgen Resources.resx Resources.resources

Conversión entre tipos de archivo de recursos

Además de compilar archivos de recursos basados en texto o basados en XML en archivos .resources binarios, Resgen.exe puede convertir cualquier tipo de archivo compatible a cualquier otro tipo de archivo compatible. Esto significa que puede realizar las siguientes conversiones:

  • .txt y archivos .restext en archivos .resx.

  • Archivos .resx para .txt y archivos .restext.

  • Archivos .resources para .txt y archivos .restext.

  • Archivos .resources en archivos .resx.

La sintaxis es la misma que la que se muestra en la sección anterior.

Además, puedes usar Resgen.exe para convertir recursos incrustados en un ensamblado de .NET Framework en un archivo .resw para aplicaciones de la Tienda Windows 8.x.

El siguiente comando lee un archivo de recursos binario Resources.resources y escribe un archivo de salida basado en XML denominado Resources.resx.

resgen Resources.resources Resources.resx

El comando siguiente lee un archivo de recursos basado en texto denominado StringResources.txt y escribe un archivo de recursos basado en XML denominado LibraryResources.resx. Además de contener recursos de cadena, el archivo .resx también se puede usar para almacenar recursos que no son de cadena.

resgen StringResources.txt LibraryResources.resx

Los dos comandos siguientes leen un archivo de recursos basado en XML denominado Resources.resx y escriben archivos de texto denominados Resources.txt y Resources.restext. Tenga en cuenta que si el archivo .resx contiene objetos incrustados, no se convertirán con precisión en los archivos de texto.

resgen Resources.resx Resources.txt
resgen Resources.resx Resources.restext

Compilación o conversión de varios archivos

Puede usar el /compile modificador para convertir una lista de archivos de recursos de un formato a otro en una sola operación. La sintaxis es:

resgen /compile filename.extension [filename.extension...]

El siguiente comando compila tres archivos, StringResources.txt, TableResources.resw y ImageResources.resw, en archivos .resources independientes denominados StringResources.resources, TableResources.resources e ImageResources.resources.

resgen /compile StringResources.txt TableResources.resx ImageResources.resx

Exportar recursos a un archivo .resw

Si estás desarrollando una aplicación de la Tienda Windows 8.x, es posible que quieras usar recursos de una aplicación de escritorio existente. Sin embargo, los dos tipos de aplicaciones admiten formatos de archivo diferentes. En las aplicaciones de escritorio, los recursos de texto (.txt o .restext) o los archivos .resx se compilan en archivos .resources binarios. En las aplicaciones de la Tienda Windows 8.x, los archivos .resw se compilan en archivos de índice de recursos de paquetes binarios (PRI). Puedes usar Resgen.exe para salvar esta brecha extrayendo recursos de un ensamblado ejecutable o satélite y escribiendolos en uno o varios archivos .resw que se pueden usar al desarrollar una aplicación de la Tienda Windows 8.x.

Importante

Visual Studio controla automáticamente todas las conversiones necesarias para incorporar los recursos de una biblioteca portátil en una aplicación de la Tienda Windows 8.x. El uso de Resgen.exe directamente para convertir los recursos de un ensamblado en formato de archivo .resw solo es de interés para los desarrolladores que quieran desarrollar una aplicación de la Tienda Windows 8.x fuera de Visual Studio.

La sintaxis para generar archivos .resw a partir de un ensamblado es:

resgen filename.extension  [outputDirectory]

donde los parámetros son:

filename.extension Nombre de un ensamblado de .NET Framework (un ejecutable o .DLL). Si el archivo no contiene ningún recurso, Resgen.exe no crea ningún archivo.

outputDirectory Directorio existente en el que se van a escribir los archivos .resw. Si outputDirectory se omite, los archivos .resw se escriben en el directorio actual. Resgen.exe crea un archivo .resw para cada archivo .resources del ensamblado. El nombre de archivo raíz del archivo .resw es el mismo que el nombre raíz del archivo .resources.

El comando siguiente crea un archivo .resw en el directorio Win8Resources para cada archivo .resources insertado en MyApp.exe:

resgen MyApp.exe Win8Resources

Compilación condicional de recursos

A partir de .NET Framework 4.5, Resgen.exe admite la compilación condicional de recursos de cadena en archivos de texto (.txt y .restext). Esto le permite usar un único archivo de recursos basado en texto en varias configuraciones de compilación.

En un archivo .txt o .restext, use ...#ifdef #endif construir para incluir un recurso en el archivo .resources binario si se define un símbolo y se usa la #if !construcción ... #endif para incluir un recurso si no se define un símbolo. En tiempo de compilación, se definen símbolos mediante la /define: opción seguida de una lista delimitada por comas de símbolos. En la comparación se distinguen mayúsculas de minúsculas. El caso de los símbolos definidos por /define debe coincidir con el caso de los símbolos de los archivos de texto que se van a compilar.

Por ejemplo, el siguiente archivo denominado UIResources.text incluye un recurso de cadena denominado AppTitle que puede tomar uno de tres valores, dependiendo de si se definen símbolos denominados PRODUCTION, CONSULTo RETAIL .

#ifdef PRODUCTION
AppTitle=My Software Company Project Manager
#endif
#ifdef CONSULT
AppTitle=My Consulting Company Project Manager
#endif
#ifdef RETAIL
AppTitle=My Retail Store Project Manager
#endif
FileMenuName=File

Después, el archivo se puede compilar en un archivo .resources binario con el siguiente comando:

resgen /define:CONSULT UIResources.restext

Esto genera un archivo .resources que contiene dos recursos de cadena. El valor del AppTitle recurso es "My Consulting Company Project Manager".

Generación de una clase de recursos fuertemente tipada

Resgen.exe admite recursos fuertemente tipados, que encapsulan el acceso a los recursos mediante la creación de clases que contienen un conjunto de propiedades estáticas de solo lectura. Esto proporciona una alternativa a llamar a los métodos de la ResourceManager clase directamente para recuperar recursos. Puede habilitar la compatibilidad con recursos fuertemente tipados mediante la /str opción de Resgen.exe, que ajusta la funcionalidad de la StronglyTypedResourceBuilder clase . Cuando se especifica la /str opción , la salida de Resgen.exe es una clase que contiene propiedades fuertemente tipadas que coinciden con los recursos a los que se hace referencia en el parámetro de entrada. Esta clase proporciona acceso de solo lectura fuertemente tipado a los recursos que están disponibles en el archivo procesado.

La sintaxis para crear un recurso fuertemente tipado es:

resgen inputFilename [outputFilename] /str:language[,namespace,[classname[,filename]]] [/publicClass]

Los parámetros y modificadores son:

inputFilename Nombre de archivo, incluida la extensión, del archivo de recursos para el que se va a generar una clase de recursos fuertemente tipada. El archivo puede ser un archivo .resources binario o basado en texto; puede tener una extensión de .txt, .restext, .resw o .resources.

outputFilename Nombre del archivo de salida. Si outputFilename incluye una ruta de acceso de directorio, el directorio debe existir. Si omite outputFilename, Resgen.exe crea un archivo .resources con el nombre de archivo raíz de inputFilename en el mismo directorio que inputFilename.

outputFilename puede ser un archivo .resources binario basado en texto o basado en XML. Si la extensión de archivo de outputFilename es diferente de la extensión de archivo de inputFilename, Resgen.exe realiza la conversión de archivo.

Si inputFilename es un archivo .resources, Resgen.exe copia el archivo .resources si outputFilename también es un archivo .resources. Si outputFilename se omite, Resgen.exe sobrescribe inputFilename con un archivo .resources idéntico.

Idioma Lenguaje en el que se va a generar código fuente para la clase de recursos fuertemente tipada. Los valores posibles son , y csharp para el código de C#, vb y visualbasic para el código de Visual Basic, vbs y vbscript para el código vbScript, y c++, mcy cpp para el código de C+C#+.cs

Namespace Espacio de nombres que contiene la clase de recursos fuertemente tipada. El archivo .resources y la clase de recurso deben tener el mismo espacio de nombres. Para obtener información sobre cómo especificar el espacio de nombres en , vea Compilar recursos enoutputFilename un archivo binario. Si se omite el espacio de nombres , la clase de recurso no se encuentra en un espacio de nombres.

classname Nombre de la clase de recursos fuertemente tipada. Esto debe corresponder al nombre raíz del archivo .resources. Por ejemplo, si Resgen.exe genera un archivo .resources denominado MyCompany.Libraries.Strings.resources, el nombre de la clase de recursos fuertemente tipada es Strings. Si se omite classname , la clase generada se deriva del nombre raíz de outputFilename. Si outputFilename se omite, la clase generada se deriva del nombre raíz de inputFilename.

classname no puede contener caracteres no válidos, como espacios incrustados. Si classname contiene espacios incrustados o si classname se genera de forma predeterminada a partir de inputFilename y inputFilename contiene espacios incrustados, Resgen.exe reemplaza todos los caracteres no válidos por un carácter de subrayado (_).

Nombre Nombre del archivo de clase.

/publicclass Hace que la clase de recurso fuertemente tipada sea pública en lugar internal de (en C#) o Friend (en Visual Basic). Esto permite acceder a los recursos desde fuera del ensamblado en el que están incrustados.

Importante

Al crear una clase de recursos fuertemente tipada, el nombre del archivo .resources debe coincidir con el espacio de nombres y el nombre de clase del código generado. Sin embargo, Resgen.exe permite especificar opciones que generan un archivo .resources que tiene un nombre incompatible. Para solucionar este comportamiento, cambie el nombre del archivo de salida después de que se haya generado.

La clase de recursos fuertemente tipada tiene los siguientes miembros:

  • Un constructor sin parámetros, que se puede usar para crear instancias de la clase de recursos fuertemente tipada.

  • Una static propiedad (C#) o Shared (Visual Basic) y de solo ResourceManager lectura, que devuelve la ResourceManager instancia que administra el recurso fuertemente tipado.

  • Una propiedad estática Culture , que permite establecer la referencia cultural utilizada para la recuperación de recursos. De forma predeterminada, su valor es null, lo que significa que se usa la referencia cultural de la interfaz de usuario actual.

  • Una static propiedad (C#) o Shared (Visual Basic) y de solo lectura para cada recurso del archivo .resources. El nombre de la propiedad es el nombre del recurso.

Por ejemplo, el comando siguiente compila un archivo de recursos denominado StringResources.txt en StringResources.resources y genera una clase denominada StringResources en un archivo de código fuente de Visual Basic denominado StringResources.vb que se puede usar para acceder al Administrador de recursos.

resgen StringResources.txt /str:vb,,StringResources

Consulte también