So versuchen Sie, die nicht gefundene Assembly abzufangen

8

OK, sagen Sie, ich habe eine Anwendung wie folgt:

%Vor%

Was ich will ist, dass, wenn die Assembly-DLL AlienExist nicht gefunden werden kann, die Anwendung keinen Fehler zurückgibt - sondern eher "trycatched" ist, was so etwas wie ...:

ist %Vor%

Wie geht es? Ich weiß, dass das Schlüsselwort using später nicht benutzt werden kann, aber ich bin jetzt viel zu faul, um es zu testen.

10x!

    
johny 04.03.2011, 19:32
quelle

3 Antworten

8

Das können Sie in einem try / catch nicht wirklich tun, aber Sie können das Ereignis AssemblyResolve in der AppDomain behandeln.

Weitere Informationen finden Sie Ссылка .

Sie werden jedoch mindestens Ihren Code kompilieren müssen. Wenn Sie versuchen, eine Assembly zu referenzieren, die vorhanden sein kann oder nicht, müssen Sie sie dynamisch laden und von dort aus arbeiten.

    
vcsjones 04.03.2011 19:34
quelle
3

Ich glaube, Sie versuchen, Assemblys zur Laufzeit anstatt zur Kompilierzeit zu laden, richtig?

Wenn ja, überprüfen Sie Folgendes: C # Laden Sie Assemblys zur Laufzeit .

    
Mike Atlas 04.03.2011 19:37
quelle
0

Alte Frage, aber ich denke diese Info muss hinzugefügt werden:

Sie können eine using-Anweisung nicht versuchen / abfangen, aber Sie können versuchen, die Auflösung einer Baugruppe zu erfassen .

Sie haben noch mehr Kontrolle, wenn Sie Baugruppen manuell laden, wie von Mike Atlas vorgeschlagen.

Sie können eine Assembly auch manuell überprüfen, bevor Sie versuchen, sie aufzulösen, indem Sie GetEntryAssembly.GetReferencedAssemblies () und Vergleich mit etwas wie AssemblyName.GetAssemblyName () .

Natürlich können Sie in einigen Fällen ein einfaches File.Exists(AssemblyPath) verwenden, aber die oben genannten Methoden würden dazu beitragen, zusätzliche Probleme bei der Assemblierung, wie Versionsnummerierung oder Signierung, zu überprüfen.

AssemblyResolve ist nett und bietet einen ereignisbasierten Ansatz. Gut, wenn Sie eine hohe zyklomatische Komplexität haben und / oder mit JIT mitfahren wollen, aber weniger informativ als eine Vorabüberprüfung.

Achten Sie auf den fail-fast-Principal, und das Ausmaß, in dem die Assembly Fehler auflöst, kann die Funktionalität einschränken.

    
u8it 18.08.2016 20:03
quelle

Tags und Links