Frage an .net – Überprüfung auf externe Abhängigkeiten in vb.net

1

Sowas habe ich noch nie wirklich gemacht, aber was ist der beste Weg, um sicherzustellen, dass alle externen Assemblys / DLLs, die meine Anwendung verwendet, verfügbar sind und möglicherweise die richtige Version.

Ich habe eine App geschrieben, die auf der System.Data.SQLite.dll basiert. Ich habe sie auf einem Computer getestet, auf dem diese DLL fehlte, und meine App hat nur eine Laufzeitausnahme ausgelöst, weil die DLL fehlte. Wie kann ich diesen Fehler abfangen?

Deine Antwort

4   die antwort
1

(Ich habe die gemeindeeigene Flagge auf diese gesetzt, da dies größtenteils aus meinem Bauch heraus geschieht und ich wahrscheinlich irgendwo einen entscheidenden Schritt verpasst habe.)

Kurze Antwort: Im Allgemeinen ist es eine gute Idee, Ihre Abhängigkeiten mithilfe eines Installationsprogramms neben Ihrer Anwendung bereitzustellen. Ohne sie besteht, wie Sie bemerkt haben, kaum eine Chance, dass Ihre Anwendung funktioniert.

Lange Antwort: Ok, sag du hastextra Funktionalität, die Sie bereitstellen möchten, wenn auf dem Zielcomputer etwas anderes installiert ist. Hier sind einige allgemeine Richtlinien, um dies zu tun:

Für jeden Typ mit einem Feld, einer Eigenschaft, einem Ereignis, einem Parameter oder einem Rückgabewert, der auf einen Typ verweist, der in der möglicherweise deinstallierten Assembly definiert ist: Muss mit einer Schnittstelle umbrochen werden und alle anderen Felder, Parameter, Rückgabewerte oder lokalen Werte ersetzen Variablendeklarationen zur Verwendung der Schnittstelle.

Jedes Mal, wenn Sie eine der zuvor umschlossenen Klassen erstellen, müssen Sie die verwendenSystem.Activator.CreateInstance Methode, und wickeln Sie es in eine Try / Catch-Filterung für 7 verschiedene Ausnahmetypen:

FileNotFoundExceptionFileLoadExceptionBadImageFormatExceptionTypeLoadExceptionMissingMethodExceptionMissingMemberExceptionMissingFieldException

Wenn eine davon abgefangen wird, müssen Sie entweder eine alternative Implementierung der zuvor erstellten Schnittstelle bereitstellen oder Ihren Code so schreiben, dass er bei jedem Verweis auf dieses Objekt auf null überprüft.

Vielen Dank für diese Erklärung, ich verwende den Beispielcode von Josh, aber diese Informationen sind auch sehr hilfreich beakersoft
0

Sie können ein Setup-Projekt verwenden, um ein Installationsprogramm für Ihre App zu erstellen. Dies würde alle statischen Abhängigkeiten analysieren und ein Installationsprogramm erstellen, das sicherstellt, dass der Zielcomputer alles erhält, was er benötigt.

0

Sie sollten den Fehler außerhalb Ihrer Hauptschleife abfangen.
Oder wenn Sie Ihre eigenen Baugruppen versenden / lokalisieren möchten, können Sie versuchen, die Baugruppenprüfung zu überschreiben:Verknüpfung.

1

Sie möchten mit Reflection prüfen, ob die Assembly in den Speicher geladen werden kann. Packen Sie das in einen try..catch-Block und behandeln Sie eine der spezifischen Ausnahmen, die von ihm ausgehen.

Try
    Assembly.Load("System.Data.SQLite, Version=1.0.22.0, Culture=neutral, PublicKeyToken=DB937BC2D44FF139");
Catch ex As FileNotFoundException
    //do something here
End Try

Verwandte Fragen