visual studio 2010 - studio - ¿Cómo agregar un manifiesto de ensamblaje a un ejecutable de.NET?
install emmet visual studio code (3)
En Visual Studio 2008, esto se puede hacer en la ventana Propiedades del proyecto. Estoy casi seguro de que es lo mismo en 2010. Haga clic derecho en su proyecto, seleccione propiedades, y en la pestaña de la aplicación puede seleccionar un manifiesto. Primero debe agregarlo a su proyecto, pero puede hacerlo fácilmente agregando un archivo existente.
¿Cómo puedo agregar un manifiesto de ensamblaje a mi ejecutable de .NET?
Un manifiesto de ensamblaje es un archivo XML que se agrega a un ejecutable portable .NET (PE) con el tipo de recurso RT_MANIFEST
(24).
Los manifiestos de la asamblea se utilizan para declarar varias cosas sobre el ejecutable, por ejemplo:
Si quiero desactivar la escala de DPI porque soy un buen desarrollador:
<!-- We are high-dpi aware on Windows Vista --> <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application>
Puedo declarar que fui diseñado y probado en Windows 7 y que debería seguir dependiendo de cualquier error en Windows 7
<!-- We were designed and tested on Windows 7 --> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!--The ID below indicates application support for Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> </application> </compatibility>
Puedo declarar que soy un buen desarrollador y que no necesito virtualización de archivos y registros
<!-- Disable file and registry virtualization --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo>
Puedo declarar que dependo de una versión particular 6 de la biblioteca Microsoft Common Controls :
<!-- Dependency on Common Controls version 6 --> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency>
Puedo declarar que dependo de una versión particular de GDI +:
<dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.GdiPlus" version="1.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency>
En los viejos tiempos , *.rc
un archivo de script de recursos ( *.rc
), por ejemplo:
wumpa.rc
1 24 AssemblyManifest.xml
agregue ese archivo al proyecto, y el compilador compilará el archivo .rc
; incluyendo recursos en la imagen ejecutable final.
Excepto que Visual Studio 2010 no parece tener una forma de agregar un archivo de script de recursos a un proyecto .
¿Cómo agrego un script de recursos a un proyecto en Visual Studio 2010?
¿Cómo agrego un manifiesto de ensamblaje a un proyecto en Visual Studio 2010?
Nota : cualquier solución debe funcionar en un entorno con control de fuente y múltiples desarrolladores (por ejemplo, las rutas codificadas a los binarios probablemente no instalados romperán la construcción y no funcionarán).
Bonus Chatter
- VS2010 / .NET: ¿Cómo incrustar un recurso en un ejecutable .NET PE?
- VS2005: Cómo incrustar un manifiesto en un ensamblaje: déjame contar las formas ... (no se puede hacer)
Actualización : Michael Fox sugiere que el diálogo de propiedades del proyecto se pueda usar para incluir un manifiesto de ensamblaje, pero no indica dónde :
Actualización : cosas que he intentado:
- Desde la pantalla de propiedades del proyecto, seleccione Aplicación . Seleccione la opción de radio Icono y Manifiesto . En Manifiesto, deje la opción predeterminada
Embed manifest with default settings
:
No funciona porque incorpora un manifiesto con la configuración predeterminada , en lugar de mi configuración.
En Manifiesto , cambie la opción de combinación a
Create application without a manifest
:No funciona porque no incorpora ningún manifiesto
En Recursos seleccione la opción de radio Archivo de recursos :
No funciona porque no puede seleccionar un manifiesto de ensamblaje (o un script de recursos que incluye un manifiesto de ensamblaje)
En Recursos , seleccione la opción de radio Archivo de recursos , luego ingrese la ruta a un archivo XML de manifiesto de ensamblaje:
No funciona porque Visual Studio se bloquea cuando se presenta con un manifiesto de ensamblaje :
- En Recursos , seleccione la opción de radio Archivo de recursos , luego ingrese la ruta a un archivo de script de recursos:
No funciona porque Visual Studio se bloquea cuando se le presenta un script de recursos :
Agregue
AssemblyManifest.xml
a mi proyecto, luego búsquelo en el cuadro combinado Manifiesto :No funciona porque el archivo Manifiesto de ensamblaje no aparece como una opción
tengo una docena de otras cosas que puedo seguir capturando (agregue un archivo .rc a la solución, búsquelo en el menú desplegable, seleccione "no manifest" y cambie la acción de compilación
wumpa.rc
por varias cosas,.rc
archivo.rc
usando un compilador de recursos por separado, ya sea manualmente, o un paso previo a la compilación / msbuild, y seleccione ese archivo.res
como mi recurso). Dejaré de agregar más volumen a mi pregunta y espero una respuesta.
Si desea agregar información personalizada al manifiesto de su aplicación, puede seguir estos pasos:
- Haga clic derecho en el proyecto en el Explorador de soluciones.
- Haga clic en "Agregar nuevo elemento".
- Seleccione "Archivo de Manifiesto de Aplicación".
Esto agrega un archivo llamado app.manifest
a su proyecto, que puede abrir y modificar como desee.
Pasos similares, con capturas de pantalla, se eliminaron de Declarar aplicaciones administradas como DPI-Aware en MSDN:
En el Explorador de soluciones, haga clic con el botón derecho en su proyecto, señale Agregar y luego haga clic en Nuevo elemento .
En el cuadro de diálogo Agregar nuevo elemento , seleccione Archivo de manifiesto de la aplicación y luego haga clic en Agregar . Aparece el archivo app.manifest.
Copie y pegue el siguiente texto en el archivo app.manifest y luego guárdelo.
<?xml version="1.0" encoding="utf-8"?> <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> <!-- Disable file and registry virtualization. --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> <!-- <requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> --> </requestedPrivileges> </security> </trustInfo> <!-- We are high-dpi aware on Windows Vista --> <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application> <!-- Declare that we were designed to work with Windows Vista and Windows 7--> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!--The ID below indicates application support for Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!--The ID below indicates application support for Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> </application> </compatibility> <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) --> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </asmv1:assembly>
En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y luego haga clic en Propiedades para verificar que se utiliza la aplicación.manifiesto.
Su aplicación ahora se manifiesta como requerida para ser "diseñada para Windows", y es
- desactiva la virtualización de archivos y registros
- deshabilita la escala de DWM de las aplicaciones
- anuncia que fuiste diseñado y probado en Windows 7 y Windows Vista
- toma una dependencia de la biblioteca Common Controls versión 6 (que permite el uso de estilos visuales por los controles comunes)
Tengo instalado Visual Studio 2010 Professional con Service Pack 1. Me estoy ejecutando en Windows 7 Ultimate de 64 bits. Si sigo estas instrucciones, las propiedades del proyecto muestran "Insertar manifiesto con la configuración predeterminada" en el bloque de recursos, ¡y también la opción está deshabilitada! Cuando construyo, el manifiesto no se incrusta en la DLL como lo verifiqué al abrir la DLL en la vista de recursos.
Sin embargo, si yo:
- Ubique el archivo de la aplicación.manifesida agregada en el Explorador de soluciones
- Haga clic derecho y elija Propiedades
- Cambie la propiedad Acción de compilación de "Ninguno" a "Recurso incrustado"
- Reconstruir
El archivo de manifiesto está incrustado correctamente, que puedo verificar cargando el archivo DLL en la vista de recursos. La configuración de manifiesto en las propiedades de la aplicación todavía se muestra como "manifiesto incrustado con la configuración predeterminada" y todavía está deshabilitada.