Comment ajouter un manifeste a.NET exécutable?

Comment puis-je ajouter un manifeste d'assemblage à mon exécutable .NET?


un manifeste d'assemblage est un fichier XML qui est ajouté à un exécutable portable (PE) avec le type de ressource RT_MANIFEST (24).

les manifestes D'assemblage sont utilisés pour déclarer un certain nombre de choses au sujet de l'exécutable, par exemple:

  • si je veux désactiver DPI-scaling 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 tous les bogues 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 la virtualisation des fichiers et des 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épends d'une version particulière 6 de la Microsoft Common Controls library:

    <!-- 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épends 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 les vieux jours , nous créerions un script de ressource fichier ( *.rc ), par exemple:

wumpa.rc

   1    24    AssemblyManifest.xml

ajoute Ce fichier au projet, et le compilateur compilera le fichier .rc ; incluant les ressources dans l'image finale exécutable.

excepté Visual Studio 2010 ne semble pas avoir une façon d'ajouter un fichier de script de ressource à un projet .

Comment puis-je ajouter un script ressource à un projet dans Visual Studio 2010?

comment ajouter un manifeste d'assemblée à un projet en Visual Studio 2010?

Note : toute solution doit fonctionner dans un environnement avec un contrôle source et plusieurs développeurs (par exemple des chemins codés en dur vers des binaires probablement non installés casseront la construction et ne fonctionneront pas).

Chatter Bonus


mise à jour : Michael Fox suggère que la boîte de dialogue Propriétés du projet peut être utilisée pour inclure un manifeste d'assemblage, mais il n'indique pas :

enter image description here


mise à jour : les Choses que j'ai essayé:

  • à partir de l'écran Propriétés du projet, sélectionnez Application . Sélectionnez l'option radio icône et manifeste . Sous manifeste laisser l'option par défaut de Embed manifest with default settings :

enter image description here

ne fonctionne pas parce qu'il intègre un manifeste avec les paramètres par défaut , plutôt que mes paramètres.

  • sous manifeste , remplacer l'option combo par Create application without a manifest :

    enter image description here

    ne fonctionne pas parce qu'il ne contient pas de manifeste

  • Sous Ressources sélectionnez le fichier de ressources option radio:

    enter image description here

    ne fonctionne pas parce que vous ne pouvez pas sélectionner un manifeste d'assemblage (ou un script de ressources qui inclut un manifeste d'assemblage)

  • sous ressources , sélectionnez le fichier de ressources option radio, puis chemin vers un fichier XML de manifeste d'assemblage:

enter image description here

ne fonctionne pas parce que Visual Studio s'étouffe lorsqu'il est présenté avec un manifeste d'assemblage :

enter image description here

  • sous ressources , sélectionnez le Fichier de ressources option radio, puis entrer le chemin vers un fichier de script de ressources:

enter image description here

Ne fonctionne pas parce que Visual Studio étouffe lorsqu'ils sont présentés avec un script de ressources :

enter image description here

  • ajouter le AssemblyManifest.xml au mon projet, puis le chercher dans le manifeste boîte combo:

    enter image description here

    ne fonctionne pas parce que le fichier du Manifeste D'assemblage n'est pas répertorié comme une option

j'ai une douzaine d'autres choses que je peux garder screenshotting (ajouter un .fichier rc de la solution, cherchez dans la liste déroulante, sélectionnez "pas de manifeste" et de modifier le wumpa.rc construire l'action à diverses choses, construire le .rc fichier en utilisant un compilateur de ressources séparé, soit manuellement, ou une étape pré-construction/msbuild, et sélectionnez que .res fichier comme ma ressource). je vais arrêter d'ajouter plus de volume à ma question et espérer une réponse.

28
demandé sur Community 2011-11-15 23:12:39

3 réponses

si vous voulez ajouter des informations personnalisées au manifeste de votre application, vous pouvez suivre ces étapes:

  1. faites un clic droit sur le projet dans L'Explorateur de solutions.
  2. Cliquez Sur"Ajouter Un Nouvel Élément".
  3. Sélectionner"Application Manifest File".

ceci ajoute un fichier nommé app.manifest à votre projet, que vous pouvez ouvrir et modifier comme désiré.


étapes similaires, avec captures d'écran, levées de déclarant les Applications gérées en tant que DPI-Aware sur MSDN:

  1. dans la Solution Explorer, droit-cliquez sur votre projet, pointez vers ajouter , puis cliquez sur nouvel article .

  2. dans le Ajouter un nouvel article boîte de dialogue, Sélectionner Fichier , puis cliquez sur Ajouter . App.le fichier manifeste apparaît.

    enter image description here

  3. copiez et collez le texte suivant dans app.manifeste fichier et puis enregistrer.

    <?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>
    
  4. dans la Solution Explorer, droit-cliquez sur le projet , puis cliquez sur Propriétés pour vérifier que le app.le manifeste est utilisé.

    enter image description here

  5. votre demande est maintenant manifeste comme étant "conçu pour Windows", et est

    • désactive la virtualisation des fichiers et des registres
    • annule DWM scaling of applications
    • annonce que vous avez été conçu et testé sur Windows 7 et Windows Vista
    • prend une dépendance de la bibliothèque des contrôles communs version 6 (permettant l'utilisation de styles visuels par les contrôles communs)
24
répondu Cody Gray 2012-03-06 16:32:08

J'ai Visual Studio 2010 Professional avec Service Pack 1 installé. Je cours sur Windows 7 Ultimate 64-bit. Si je suis ces instructions, les propriétés du projet montre "manifeste intégré avec les paramètres par défaut" dans le bloc de ressources, et aussi l'option est désactivée! Quand je construis, le manifeste ne s'incruste pas dans la DLL comme je l'ai vérifié en ouvrant la DLL dans la vue de ressource.

toutefois, si I:

  1. Localisez l'application ajoutée.fichier manifeste dans la Solution Explorer
  2. clic droit et choisir des propriétés
  3. Changement de l'Action de Construire de la propriété de "nul" à "Ressource Incorporée"
  4. reconstruire

le fichier de manifeste est intégré correctement, ce que je peux vérifier en chargeant la DLL dans la vue de ressource. Le Manifeste paramètre dans les propriétés de l'Application apparaît toujours comme "Embed manifeste par défaut les paramètres" et est toujours désactivé.

6
répondu Mozzis 2012-08-02 20:12:22

dans Visual Studio 2008, cela peut être fait dans la fenêtre des propriétés du projet. Je suis presque sûr que c'est la même chose en 2010. Clic droit sur votre projet, sélectionnez propriétés, et dans l'onglet application, vous pouvez sélectionner un manifeste. Vous devez l'ajouter à votre projet, mais vous pouvez le faire facilement en ajoutant un fichier existant.

2
répondu Michael Fox 2011-11-15 19:26:37