Frage

Hat jemand eine Idee hat, was die Fusion Loader ohne Warnung oder Bestätigung einfach überspringt eine DLL verursachen würde?

Wenn ich versuche, dies zu tun (in C #) von einer Befehlszeilen-Anwendung

Assembly.LoadFrom("c:\\Deploy\\bin\\WebServices.dll")

Das sehe ich:

  

„Kann nicht eine oder mehrere der angeforderten Typen laden. Rufen Sie die Loaderexceptions-Eigenschaft für weitere Informationen.“

Das DLL eine Abhängigkeit von Platform.DLL hat, aber das Laden dieser Abhängigkeit nicht so diese Zeile Code löst eine Ausnahme. Wenn ich die Fusion Montage Ladenachricht überprüfen, das ist, was ich sehe:

=== Pre-bind state information ===
LOG: DisplayName = Platform, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null (Fully-specified)

...

LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\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:/Project/bin/Debug/Platform.DLL.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform/Platform.DLL.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform.EXE.
LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform/Platform.EXE.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform.DLL.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform/Platform.DLL.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform.EXE.
LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform/Platform.EXE.

Die Sache ist, die DLL ist , die an c:\Deploy\bin\Platform.DLL, mit der richtigen Version und keine signierten öffentlichen Schlüssel.

Was ich gedacht habe von:
1. Vielleicht ist es wirklich eine Abhängigkeit von Platform.DLL, die gebrochen ist, dieses Verhalten verursacht? (I den Abhängigkeitsbaum in Reflector gejagt fand aber keine fehlenden DLLs)
2. Vielleicht gibt es eine Freigabe / debug Mismatch oder einen 64-Bit vs 32-Bit? aber alles war auf der gleichen Maschine gebaut
3. Ich bin Verlesen der Protokolle Mag sein, aber es sollte nicht aufhören, wenn es eine DLL-Hits, die es findet? Ich sehe nicht, entweder die „erfolgreich“ oder „nicht erfolgreich“ Nachricht in diesem Protokoll. Ich weiß nur, es ist wegen der Ausnahme fehlgeschlagen.

PS mehr technische Details:
Maschinenumgebung ist Windows 2008 64-Bit, mit .NET 2.0, 3.0 und 3.5 installiert.
Dieselbe Anwendung läuft ganz gut auf einem anderen Rechner (Vista 32-bit), mit der gleichen Verzeichnisstruktur und DLLs, obwohl diese auf dieser Maschine gebaut wurden

War es hilfreich?

Lösung

Ja es sollte aufhören, wenn es die erforderliche DLL findet so die fünfte „Der Versuch, zum Download ...“ sollte es gefunden haben ...

Doch wo wird die Kommandozeile App wird laufen? Wenn es die Debug-Ordner dann ein paar Dinge, die können Sie versuchen, sind

  1. Haben Sie die abhängigen DLLs im selben Ordner
  2. Melden Sie die Montage und Referenz durch eine .config-Datei im Format

    <dependentAssembly>
        <assemblyIdentity name="WebServices.dll" publicKeyToken="<whatever this public key it>" />
        <codeBase version="1.0.0.0" href="..\WebServices.dll" />
    </dependentAssembly>
    
  3. sie Zeichen und dann die abhängigen Assemblys im GAC setzen.

Ich könnte weg sein, aber das ist ein paar Dinge zu versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top