visual-studio - visual - vscode html wrap
Visual Studio: ¿Cómo almacenar un recurso de imagen como un recurso incrustado? (4)
En VS 2005:
- Haga clic derecho en su proyecto y elija agregar nuevo elemento.
- Agregue un archivo de recursos. La llamada es myImages.resx
Coloque este archivo en la carpeta raíz del proyecto. - Haga clic derecho en myImages.resx y elija View Designer
- Seleccione Agregar recurso, Agregar archivo existente.
- Busque la imagen, por ejemplo, stop.bmp
Esta imagen no tiene que ser incluida en el proyecto en esta etapa. El archivo de recursos hará esto automáticamente.
Para hacer referencia a la imagen en código use algo como:
btnStop.Image = myImages.Stop;
De forma predeterminada, cuando agrega una imagen (icono, mapa de bits, etc.) como recurso a su proyecto, la Acción de compilación de la imagen se establece en Ninguno . Esto se hace porque la imagen está almacenada mágicamente dentro de un archivo .resources.
Quiero que el recurso se almacene como un recurso incrustado (mis razones son irrelevantes, pero pretendemos que sea para poder verlas dentro del Reflector de RedGate ).
Así que cambié la Acción de compilación de cada imagen al Recurso incrustado , y el recurso aparece dentro del Reflector de Lutz, exactamente como quiero.
Desafortunadamente , Microsoft dice específicamente que no haga esto :
Tenga en cuenta que cuando el editor de recursos agrega una imagen, establece Build Action en None , porque el archivo .resx hace referencia al archivo de imagen. En tiempo de compilación, la imagen se extrae en el archivo .resources creado a partir del archivo .resx. A continuación, se puede acceder fácilmente a la imagen a través de la clase fuertemente tipada autogenerada para el archivo .resx.
Por lo tanto, no debe cambiar esta configuración a Recurso incrustado , ya que al hacerlo se incluiría la imagen dos veces en el ensamblaje.
Entonces, ¿cuál es la forma correcta de incluir una imagen como recurso incrustado?
En la vista del proyecto, abra el subárbol Propiedades; haga doble clic en el elemento Resources.resx.
(Si no tiene una, haga clic con el botón derecho en el elemento Propiedades y elija Abrir, luego haga clic en la pestaña Recursos a la izquierda y haga clic en el enlace en el medio de la página para crear un archivo de recursos predeterminado).
haga clic en la primera lista desplegable en la parte superior de la página resources.resx. Probablemente diga algo inútil como "Cadenas" y seleccione Imágenes. Alternativamente, puede presionar Ctrl + 2 . Esto cambia a la vista de recursos de Imagen. Ahora haga clic en la lista desplegable Agregar recurso y seleccione ''archivo existente''. Seleccione su archivo de imagen y haga clic en Abrir. Cambie el nombre del recurso si lo desea.
Haga clic en el icono Guardar.
Ahora puede acceder a su recurso incrustado programáticamente como:
[namespace].Properties.Resources.[yourResourceName]
Esto depende de cómo quieras usar la imagen.
Si desea localizar y acceder a imágenes específicas para una cultura específica, entonces usar el ResourceManager
es una buena forma de hacerlo, ya que proporciona una buena funcionalidad para ensambles de satélites, búsquedas, retrocesos, etc.
Si solo desea incrustar un recurso en un ensamblado y no le preocupa la localización (utilizando Assembly.GetManifestResourceStream
), entonces solo agregar una imagen y establecer la acción de compilación en el Embedded Resource
está bien.
La documentación le advierte sobre no establecer la acción de compilación en el recurso Embedded Resource
porque el compilador de recursos compila el recurso en el ensamblado a través del archivo .resx.
Nota: esta respuesta no es la forma recomendada de manejar los recursos de imagen. Simplemente trata el problema particular como se describe en la pregunta (es decir, para incluir una imagen como recurso integrado).
No agregue la imagen como un recurso. Prefiero hacer lo siguiente:
- Crea la imagen / icono y guárdalo en un archivo
- Elija Proyecto -> Agregar elemento existente y agregue el archivo
- Establezca la acción de compilación en el recurso incrustado
A continuación, puede acceder a este recurso usando
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceUri)
De esta forma, la imagen no se agrega mágicamente al archivo de recursos del proyecto y solo tendrá una copia de la imagen almacenada en los recursos del ensamblaje.