Comment puis-je ajouter un manifeste Assembly à mon exécutable .NET?
Un manifeste d'assembly est un fichier XML qui est ajouté à un exécutable portable .NET (PE) avec le type de ressource RT_MANIFEST
(24).
Les manifestes d'assembly sont utilisés pour déclarer un certain nombre de choses sur l'exécutable, par exemple:
Si je souhaite désactiver la mise à l'échelle DPI parce que je suis un bon développeur:
<!-- 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>
je peux déclarer que j'ai été conçu et testé sur Windows 7, et je dois continuer à dépendre de tout bogue dans 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>
je peux déclarer que je suis un bon développeur et que je n'ai pas besoin de virtualisation de fichiers et de registres
<!-- Disable file and registry virtualization -->
<trustInfo xmlns="urn:schemas-Microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
je peux déclarer que je dépend d'une version particulière 6 de la bibliothèque 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>
je peux déclarer que je dépend d'une version particulière de GDI +:
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.GdiPlus" version="1.0.0.0" processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
Dans l'ancien temps , nous créerions un fichier de script de ressource (*.rc
), par exemple.:
wumpa.rc
1 24 AssemblyManifest.xml
ajoutez ce fichier au projet, et le compilateur compilera le .rc
fichier; y compris les ressources dans l'image exécutable finale.
Comment ajouter un script de ressource à un projet dans Visual Studio 2010?
Comment ajouter un manifeste d'assembly à un projet dans Visual Studio 2010?
Remarque : Toute solution doit fonctionner dans un environnement avec contrôle de code source et plusieurs développeurs (par exemple, des chemins codés en dur vers des fichiers binaires probablement non installés casseront la construction et non travail).
Mise à jour : Michael Fox suggère que la boîte de dialogue des propriétés du projet puisse être utilisée pour inclure un manifeste d'assembly, mais il n'indique pas où:
Mise à jour : Ce que j'ai essayé:
Embed manifest with default settings
:Ne fonctionne pas car il intègre un manifeste avec les paramètres par défaut , plutôt que mes paramètres.
Sous Manifest , changez l'option combo en Create application without a manifest
:
Ne fonctionne pas car il n'intègre aucun manifeste
Sous Ressources sélectionnez l'option de radio Fichier de ressources :
Ne fonctionne pas car vous ne pouvez pas sélectionner un manifeste d'assembly (ou un script de ressource qui inclut un manifeste d'assembly)
Sous Ressources , sélectionnez l'option de radio Fichier de ressources , puis entrez le chemin dans un fichier XML de manifeste d'assembly:
Ne fonctionne pas car Visual Studio s'étouffe lorsqu'il est présenté avec un manifeste Assembly:
Ne fonctionne pas car Visual Studio s'étouffe lorsqu'il est présenté avec un script de ressource:
Ajouter le AssemblyManifest.xml
à mon projet, puis recherchez-le dans la zone de liste déroulante Manifest :
Ne fonctionne pas car le fichier Manifest d'assembly n'est pas répertorié en option
j'ai une douzaine d'autres choses que je peux garder capture d'écran (ajoutez un fichier .rc à la solution, recherchez-le dans la liste déroulante, sélectionnez "pas de manifeste" et modifiez le
wumpa.rc
créer une action pour diverses choses, construire le.rc
fichier à l'aide d'un compilateur de ressources distinct, soit manuellement, soit à une étape de pré-génération/msbuild, et sélectionnez ce.res
fichier comme ressource). je vais arrêter d'ajouter du volume à ma question et j'espère une réponse.
Si vous souhaitez ajouter des informations personnalisées au manifeste de votre application, vous pouvez suivre ces étapes:
Cela ajoute un fichier nommé app.manifest
à votre projet, que vous pouvez ouvrir et modifier à votre guise.
Des étapes similaires, avec des captures d'écran, sont extraites de Déclarer les applications gérées comme DPI-Aware sur MSDN:
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur votre projet, pointez sur Ajouter, puis cliquez sur Nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Fichier manifeste d'application, puis cliquez sur Ajouter. Le fichier app.manifest apparaît.
Copiez et collez le texte suivant dans le fichier app.manifest puis enregistrez.
<?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>
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis cliquez sur Propriétés pour vérifier que le app.manifest est utilisé.
Votre application est maintenant manifestée comme devant être "conçue pour Windows" et est
J'ai Visual Studio 2010 Professional avec Service Pack 1 installé. J'utilise Windows 7 Ultimate 64 bits. Si je suis ces instructions, les propriétés du projet affichent "Incorporer le manifeste avec les paramètres par défaut" dans le bloc de ressources, et l'option est également désactivée! Lorsque je crée, le manifeste n'est pas intégré dans le DLL comme je l'ai vérifié en ouvrant le DLL dans la vue des ressources).
Cependant, si je:
Le fichier manifeste est incorporé correctement, ce que je peux vérifier en chargeant le DLL dans la vue des ressources. Le paramètre Manifest dans les propriétés de l'application apparaît toujours comme "Intégrer le manifeste avec les paramètres par défaut" et est toujours désactivé .
Dans Visual Studio 2008, cela peut être fait dans la fenêtre Propriétés du projet. Je suis presque certain que c'est la même chose en 2010. Faites un clic droit sur votre projet, sélectionnez les propriétés et dans l'onglet application, vous pouvez sélectionner un manifeste. Vous devez d'abord l'ajouter à votre projet, mais vous pouvez le faire facilement en ajoutant un fichier existant.