20 Stimmen

Ist es notwendig, das Attribut "Version" der AssemblyIdentity in einer Manifestdatei zu ändern?

Ist es notwendig, im folgenden Manifest die version Attribut des assemblyIdentity Element, wenn die Baugruppenversion im Projekt angegeben ist (oder, in meinem Fall, als Teil einer MSBuild-Aufgabe festgelegt ist)?

Selon diese Microsoft Connect-Seite es siehe wie die Versionsnummer des Projekts die Versionsnummer des Manifests übersteuert. Bitte korrigieren Sie mich, wenn ich falsch liege...

<?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" processorArchitecture="X86" name="MyApp.exe" type="win32"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

8voto

Robert MacLean Punkte 38545

Der Sinn der Assembly-Informationen besteht darin, Ihre Anwendung für Windows und seine Komponenten eindeutig zu identifizieren. Dies ist vergleichbar mit der Verwendung von Dateiname + Version + generierte ID + Zielprozessorbogen in .NET zur eindeutigen Identifizierung von Assemblies.

Wenn Sie sich dafür entscheiden, sie nicht zu ändern, kann es sein, dass Windows-Komponenten neue Versionen Ihrer Anwendung nicht als eindeutig verschieden von alten Versionen erkennen.

Weitere Informationen über die Anwendungsmanifeste MSDN-Seite .

2voto

StayOnTarget Punkte 9596

Basierend auf Microsofts Dokumentation scheint es, dass JA die genaue Versionsnummer angegeben werden muss:

Montageversionen

01/07/2021

Die Version muss angegeben werden en assemblyIdentity Elemente von Manifesten. Verwenden Sie das Format der vierteiligen Version: mmmmm.nnnnn.ooooo.ppppp .

Dieser Verweis macht keine Ausnahmen; z. B. können Sie nicht mit mmmmm.nnnnn.*.* oder so ähnlich, es muss genau sein.


Ich habe versucht, eine neuere DLL zu laden, für die im Manifest eine ältere Version angegeben war. Dies schlägt mit der Fehlermeldung fehl:

"Die Anwendung konnte nicht gestartet werden, weil ihre Side-by-Side Konfiguration falsch ist"

Mit sxstrace konnte ich sehen, dass der Fehler im Detail wie folgt lautet ERROR: Die im Manifest gefundene Komponentenidentität stimmt nicht überein .

Hier ist die vollständige Spur (die letzten 4 Zeilen sind der entscheidende Teil) :

    INFO: Resolving reference SomeAssemblyName,processorArchitecture="msil",version="1.0.8047.21177".
        INFO: Resolving reference for ProcessorArchitecture msil.
            INFO: Resolving reference for culture Neutral.
                INFO: Applying Binding Policy.
                    INFO: No binding policy redirect found.
                INFO: Begin assembly probing.
                    INFO: Did not find the assembly in WinSxS.
                    INFO: Attempt to probe manifest at C:\Program Files (x86)\folder\SomeAssemblyName.DLL.
                    INFO: Manifest found at C:\Program Files (x86)\folder\SomeAssemblyName.DLL.
                INFO: End assembly probing.

    INFO: Parsing Manifest File C:\Program Files (x86)\folder\SomeAssemblyName.DLL.
        INFO: Manifest Definition Identity is SomeAssemblyName,processorArchitecture="msil",version="1.0.8047.30356".
        ERROR: Component identity found in manifest does not match the identity of the component requested. 
           Reference is SomeAssemblyName,processorArchitecture="msil",version="1.0.8047.21177". 
           Definition   SomeAssemblyName,processorArchitecture="msil",version="1.0.8047.30356".
    ERROR: Activation Context generation failed.

Es findet also die Baugruppe und vergleicht die Version, und wenn sie nicht übereinstimmen, wird sie zurückgewiesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X