web-dev-qa-db-de.com

System.IO.FileNotFoundException: Datei oder Assembly 'X' oder eine ihrer Abhängigkeiten konnte beim Bereitstellen der Anwendung nicht geladen werden

Ich habe ein seltsames Problem beim Bereitstellen einer Anwendung, die auf eine Assembly verweist, die in verwaltetem C++ geschrieben ist.

Ich habe eine Assembly X erstellt, diese kompiliert und in einer exe-Datei namens Starter referenziert.

Starter.exe startet normalerweise auf der lokalen Maschine. Wenn ich jedoch ALLE Inhalte des Starter-Debug-Ordners auf eine virtuelle Maschine kopiere und versuche, sie dort zu starten, stürzt sie mit der folgenden Ausnahme ab:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or 
Assembly 'X' or one of its dependencies. The specified module could not be found.

Das ergibt für mich keinen Sinn, da X im selben Ordner wie Starter.exe liegt.

Was könnte dieses Problem verursachen?

UPDATE

Ich habe die Abhängigkeiten in Reflector auf dem Zielcomputer untersucht, und es konnten Dateien für all diese gefunden werden.

Ich habe auch die Konfigurationen für alle Projekte auf x86/win32 geändert.

UPDATE

Hier sind die Protokolle aus dem Fusion-Protokoll (Speicherort: C:\FusionLog\Default\Starter.exe\X, Version = 1.0.4538.22813, Kultur = neutral, PublicKeyToken = null.HTM):

*** Assembly Binder Log Entry  (6/4/2012 @ 1:56:13 PM) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = MENKAUR-7683827\Administrator
LOG: DisplayName = X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Starter.exe
Calling Assembly : Starter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe.Config
LOG: Using Host configuration file: 
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based Assembly bind).
LOG: Attempting download of new URL file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/X.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
LOG: Binding succeeds. Returns Assembly from C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll.
LOG: Assembly is loaded in default load context.

Die einzigen Fehler befinden sich im Verzeichnis C:\FusionLog\NativeImage\Starter.exe \:

*** Assembly Binder Log Entry  (6/4/2012 @ 1:56:13 PM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Documents and Settings\Administrator\Desktop\tmp\k;k\Starter.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = MENKAUR-7683827\Administrator
LOG: DisplayName = BookmarkWiz.Kernel, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/Administrator/Desktop/tmp/k;k/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Starter.exe
Calling Assembly : Starter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Start binding of native image X, Version=1.0.4538.22813, Culture=neutral, PublicKeyToken=null.
WRN: No matching native image found.
LOG: IL Assembly loaded from C:\Documents and Settings\Administrator\Desktop\tmp\k;k\X.dll.

Ich kann die Versammlung nicht unterschreiben, da sie auf mehrere andere Versammlungen verweist, die nicht unterschrieben sind

24
Arsen Zahray

... Datei oder Assembly 'X' oder eine ihrer Abhängigkeiten konnte nicht geladen werden ...

Wahrscheinlich kann keine weitere Abhängigkeit geladen werden.

sie könnten versuchen, die Abhängigkeiten mit einem Abhängigkeits-Walker zu überprüfen.

Dh: http://www.dependencywalker.com/

Überprüfen Sie auch Ihre Build-Konfiguration (x86/64)

Bearbeiten: Ich hatte dieses Problem auch einmal, als ich DLLs in Zip von einer "nicht vertrauenswürdigen" Netzwerkfreigabe kopierte. Die Datei wurde von Windows gesperrt und die FileNotFoundException ausgelöst.

Siehe hier: Erkannte DLLs, die aus dem Internet stammen und von CASPOL "blockiert" wurden

16
flayn

Ich habe dieses Problem durch Umbenennen der DLL behoben. Die DLL wurde beim Hochladen an ihren freigegebenen Speicherort manuell umbenannt (eine Versionsnummer wurde an den Dateinamen angehängt). Das Entfernen der Versionsnummer aus der heruntergeladenen Datei behebt das Problem.

4
Ags1

Ich hatte das gleiche Problem. Für mich hat es geholfen, das .vs-Verzeichnis im Projektordner zu entfernen.

2
BonifatiusK