2010-11-26 17 views
1

Ich habe eine .NET CF 1.1-Anwendung, die seit Jahren einwandfrei funktioniert. Gelegentlich bekomme ich ein Help-Desk-Ticket mit der folgenden Fehlermeldung (generisch):Warum kann meine .NET CF-Anwendung keine DLL im selben Verzeichnis wie die ausführbare Datei finden?

 
    Method not found: 
    MethodName 
    AssemblyNamespace.Class 

Die DLL gibt es, und es ist die gleiche Version wie meine anderen Geräte. Was könnte das ändern, würde es die Methode nicht finden. Bedeutet dieser Fehler, dass die Assembly geladen wurde, oder brach sie, bevor das passiert ist?

Ist es wichtig, wie ich die Referenz in Visual Studio (2003, BTW) hinzugefügt? Ich habe Local Copy auf true gesetzt, und deshalb habe ich angenommen, dass es im selben Verzeichnis wie meine ausführbare Datei sein muss.

Jede Hilfe, die Sie anbieten können, wird geschätzt. Vielen Dank.

EDIT: Ich glaube, diese DLL ist auch im Windows-Verzeichnis des Geräts, möglicherweise eine andere Version. Es enthält eine Menge hardwarespezifischer Funktionen (z. B. Hintergrundbeleuchtung, Tastaturstatus usw.).

+0

"Methode nicht gefunden" ist ein DLL Hell-Problem. –

Antwort

1

Nein, es ist egal, wie Sie die Referenz in Visual Studio 2003 hinzufügen. (100% sicher)
Jetzt für die nicht so sicher : Ich denke, dass jemand anderes die gleiche Versammlung in der GAC des Telefons hat. Daher wird die GAC-Assembly aufgerufen und nicht die, die Sie bereitgestellt haben, und dieser Version der Assembly fehlt die angeforderte Funktion.

+0

Haha ... hat meine Frage bearbeitet, als Sie geantwortet haben. Wenn das der Fall ist, wie zwinge ich es, das zu laden, von dem ich weiß, dass es korrekt ist? – IronicMuffin

+0

Und in diesem Sinne ... warum macht es das nur manchmal? Ich würde annehmen, dass es auf jedem Gerät GAC'd ist ... – IronicMuffin

+0

überprüfen Sie http://StackOverflow.com/Questions/49972/in-what-order-are-Locations-Searched-To-Load-referenced-dlls für die Bestellung in welche Baugruppen gesucht werden.
Irgendwelche andere Software aktualisiert es möglicherweise. Auf einigen Handys ist diese Software vorhanden. Bei anderen ist es nicht. – basarat

0

Hängt davon ab, wie Sie die Datei in Ihrem Code referenzieren. Sie könnten sich auf das aktuelle Arbeitsverzeichnis verlassen, das je nachdem, wie die App gestartet wird oder was sie danach tun, nicht so ist, wie Sie es erwarten.

0

Manchmal gibt .NetCf diese Ausnahme aus, wenn auf dem Gerät nicht genügend Arbeitsspeicher vorhanden ist, anstelle der erwarteten Ausnahme "Nicht genügend Arbeitsspeicher". Ich habe dieses Verhalten häufiger beim Laden von nativen DLLs mit P/Invoke beobachtet, als beim Laden reiner netcf dlls.