Laden...

Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein

Erstellt von fungi35 vor 6 Jahren Letzter Beitrag vor 6 Jahren 13.188 Views
F
fungi35 Themenstarter:in
42 Beiträge seit 2015
vor 6 Jahren
Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein

Hallo Leute,

ich verzweifle gerade an folgendem Problem:

Ich muss den E-Mail-Client Tobit aus unserer Software heraus ansteuern. Das klappt soweit auch und war problemlos umzusetzen. Für die Ansteuerung wird die COM-DLL "DvApi32.DLL" vom Hersteller benötigt. Die DLL wird mit dem E-Mail-Client auf den Rechnern installiert.
Ich habe die DLL ebenfalls auf meinem Rechner (auch registriert) und habe diese über Verweise in unser Projekt eingebunden.

Das eigentliche Problem:

Bei der Ansteuerung des E-Mail-Clients erhalte ich auf dem Kundenrechner folgende Fehlermeldung:

Fehlermeldung:
Die Datei oder Assembly "Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)

Die DLL "Interop.DvApi32.dll" liegt im Verzeichnis wo auch die EXE unserer Anwendung liegt. Die Anwendung ist signiert (strong name) und mit Any CPU kompiliert.
Testweise habe ich mal ein Testprojekt mit der Ansteuerung erstellt, welches unsigniert ist. Das Testprojekt läuft auf dem Kundenrechner ohne Schwierigkeiten.

Ich habe auch schon das Logging des Assembly-Binders aktiviert, werde aber nicht schlau daraus. Was mir auffällt ist, dass eine unsignierte Version der DLL im Log aufgeführt wird.

Fehlermeldung:

*** Protokolleintrag für Assembly-Binder (19.06.2017 @ 21:34:16) ***

Fehler bei diesem Vorgang.
Ergebnis der Bindung: hr = 0x80131040. Keine Beschreibung vorhanden.

Der Assemblymanager wurde geladen aus: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Als EXE-Datei ausgeführt. C:\software\software\Application\vertrieb.exe
--- Ein detailliertes Fehlerprotokoll folgt.

=== Zustandsinformationen vor Bindung ===
LOG: DisplayName = Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532
(Fully-specified)
LOG: Appbase = file:///C:/software/software/Application/
LOG: Ursprünglicher PrivatePath = NULL
LOG: DynamicBase = NULL
LOG: CacheBase = NULL
LOG: AppName = vertrieb.exe
Aufruf von Assembly : (Unknown).
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Die Anwendungskonfigurationsdatei wird verwendet: C:\software\software\Application\vertrieb.exe.Config
LOG: Die Hostkonfigurationsdatei wird verwendet:
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config wird verwendet.
LOG: Verweis nach der Richtlinie: Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532
LOG: Die Suche im GAC war nicht erfolgreich.
LOG: Download von neuem URL file:///C:/software/software/Application/Interop.DvApi32.DLL.
LOG: Download von neuem URL file:///C:/software/software/Application/Interop.DvApi32/Interop.DvApi32.DLL.
LOG: Der Assembly-Download wurde durchgeführt. Datei-Setup wird begonnen: C:\software\software\Application\Interop.DvApi32.dll.
LOG: Die von der Quelle ausgeführte Setup-Phase beginnt.
LOG: Der Assemblyname ist: Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
WRN: Der Vergleich des Assemblynamens führte zum Konflikt: PUBLIC KEY TOKEN.

ERR: Der Assemblyverweis entsprach nicht der gefundenen Assemblydefinition.
ERR: Die von der Quelle ausgeführte Setup-Phase schlug mit hr = 0x80131040 fehl.
ERR: Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131040). Die Suche wurde beendet.

*** Protokolleintrag für Assembly-Binder (19.06.2017 @ 21:34:16) ***

Fehler bei diesem Vorgang.
Ergebnis der Bindung: hr = 0x80131040. Keine Beschreibung vorhanden.

Der Assemblymanager wurde geladen aus: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Als EXE-Datei ausgeführt. C:\software\software\Application\vertrieb.exe
--- Ein detailliertes Fehlerprotokoll folgt.

=== Zustandsinformationen vor Bindung ===
LOG: DisplayName = Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532
(Fully-specified)
LOG: Appbase = file:///C:/software/software/Application/
LOG: Ursprünglicher PrivatePath = NULL
LOG: DynamicBase = NULL
LOG: CacheBase = NULL
LOG: AppName = vertrieb.exe
Aufruf von Assembly : (Unknown).
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Die Anwendungskonfigurationsdatei wird verwendet: C:\software\software\Application\vertrieb.exe.Config
LOG: Die Hostkonfigurationsdatei wird verwendet:
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config wird verwendet.
LOG: Verweis nach der Richtlinie: Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532
LOG: Die Suche im GAC war nicht erfolgreich.
LOG: Download von neuem URL file:///C:/software/software/Application/Interop.DvApi32.DLL.
LOG: Download von neuem URL file:///C:/software/software/Application/Interop.DvApi32/Interop.DvApi32.DLL.
LOG: Der Assembly-Download wurde durchgeführt. Datei-Setup wird begonnen: C:\software\software\Application\Interop.DvApi32.dll.
LOG: Die von der Quelle ausgeführte Setup-Phase beginnt.
LOG: Der Assemblyname ist: Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
WRN: Der Vergleich des Assemblynamens führte zum Konflikt: PUBLIC KEY TOKEN.
ERR: Der Assemblyverweis entsprach nicht der gefundenen Assemblydefinition.
ERR: Die von der Quelle ausgeführte Setup-Phase schlug mit hr = 0x80131040 fehl.
ERR: Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131040). Die Suche wurde beendet.

Gruß fungi

16.842 Beiträge seit 2008
vor 6 Jahren

Die Datei oder Assembly "xxxx" oder eine Abhängigkeit davon wurde nicht gefunden. sagt erstmal aus, dass etwas nicht gefunden wurde.
Das kann eine DLL sein, die Du nutzt, oder irgendein anderer Verweis, den irgendeine DLL von Dir nutzt, von der Du gar nichts weisst. Passiert oft, wenn man DLLs "einfach so" kopiert statt sie an ihrem Ursprung zu nutzen oder zB. NuGet Pakete, sofern verfügbar, zu nutzen. Man hat einfach etwas vergessen mitzukopieren.
Hier kann man den Dependency Walker verwenden, der genau sagt, was nicht gefunden wurde.

Der zweite Fehler, dass die Signatur nicht stimmt: es wird irgendwas gesucht, das Du (indirekt) verwendest, das nicht existiert oder nicht mit der Signatur existiert, Du oder irgendein Verweis von Dir bzw. einer anderen DLL jedoch vorgegeben hat.

F
fungi35 Themenstarter:in
42 Beiträge seit 2015
vor 6 Jahren

Danke, ich konnte das Problem mittels Änderung der .config lösen 😃

1.040 Beiträge seit 2007
vor 6 Jahren

Kannst du die Problemlösung bitte etwas ausführlicher beschreiben? Danke! =)