Wie überprüft man, ob eine bestimmte Baugruppe existiert?

8

Ich verwende Activator , um eine neue Klasse basierend auf dem Kurznamen einer Assembly zu instanziieren (z. B. 'CustomModule'). Es wirft ein FileNotFoundException , weil die Assembly nicht da ist. Gibt es eine Möglichkeit zu überprüfen, ob ein bestimmter Assemblyname vorhanden ist?

Ich verwende den folgenden Code:

%Vor%

Das Hauptziel besteht darin, eher auf das Vorhandensein der Assembly zu prüfen, als auf das Auftreten der Ausnahme zu warten.

    
Kees C. Bakker 07.02.2011, 09:13
quelle

4 Antworten

8

Wenn Sie meinen Kommentar zu Ihrer Frage bemerken, wird es offensichtlich sein, dass ich nicht ganz sicher bin, ob Sie genau das wollen oder müssen, aber bis wir eine ausführlichere Beschreibung haben Ich kann Ihnen das nur in der Hoffnung anbieten, dass es gut zu Ihrer Situation passt (der Schlüssel liegt darin, die Versammlungen zu "durchsuchen"):

%Vor%

.NET 2.0 kompatibler Code

%Vor%

Wenn Sie feststellen möchten, ob die Datei vorhanden ist oder nicht, bevor Sie versuchen, sie zu laden (eine gute Vorgehensweise), versuchen Sie einfach, die Datei zu finden, wenn die Assembly aufgelöst wird:

%Vor%     
Grant Thomas 07.02.2011, 09:35
quelle
2

Ich denke, es ist besser, nicht zu versuchen, die Ausnahme zu vermeiden. Der Grund ist, dass Sie Code wie

haben %Vor%

In einem präemptiven Multitasking-Betriebssystem besteht immer das Risiko, dass die Assembly zwischen der Überprüfung und der tatsächlichen Erstellung hinzugefügt / entfernt wird. Ja, ich weiß, dass dieses Risiko minimal ist, aber ich denke immer noch, dass die Ausnahmevariante besser aussieht, weil sie atomar ist.

    
erikkallen 07.02.2011 10:06
quelle
1

Fehlende Assembly stellt definitiv eine Ausnahme dar, probiere / fang FileNotFoundException und behandle die Situation gemäß deiner Logik.

    
mmix 07.02.2011 09:33
quelle
-1

Ich hoffe, dass es für jemanden in der Zukunft helfen wird:

Erstellen Sie auf jeder externen DLL, die Sie verwenden, einen eigenen uniqe-Schlüssel:

string key="fjrj3288skckfktk4owoxkvkfk4o29dic";

Und dann, wenn Sie Ihr Formular laden, überprüfen Sie für jede einzelne externe .dll, die Sie haben, einfach, ob der Schlüssel wie folgt existiert:

If (isMyLib.Variables.key == Schlüssel)    // fahre fort

sonst    // .dll ist nicht vorhanden oder defekt.

    
LevDevNet 11.03.2017 22:13
quelle