2016-06-28 15 views
2

Wenn ich eine Assembly habe, 1.dll, die einige Typen hat, die von Typen in anderen Assemblies 2.dll und 3.dll abhängen, was bestimmt, ob diese abhängigen Assemblys vorhanden sein müssen. Ich dachte, dass es nur war, wenn ich versuchte, einen Typ von 1.dll zu laden, der einen Typ von diesen anderen dlls referenzierte.Wann müssen abhängige DLLs vorhanden sein?

zum Beispiel. Wenn ich eine Klasse A1 habe, die von 1.dll ist und eine Methode mit einem Argument vom Typ A2 (von 2.dll) hat und ich versuche, eine Instanz von A1 zu erstellen, dann brauche ich natürlich 2.dll, um vorhanden zu sein im Bin, um die Instanz A1 zu erstellen.

Wenn ich einen anderen Typ B1 (1.dll) haben, die auf A3 (3.dll) hängt aber ich nicht Versuch tun und eine B1 Instanz erstellen dann dachte ich, dass meine Bewerbung fein, auch wenn 3 ausgeführt werden soll. DLL ist nicht vorhanden, da ich nicht versuche, Instanzen von Dingen zu erstellen, die Typen benötigen, die von 3.dll stammen.

Ist das korrekt? Welche Regeln gelten für das Vorhandensein von Abhängigkeiten?

+0

Wenn Sie es nicht aufrufen oder aufrufen müssen, warum sollten Sie es überhaupt in das Projekt aufnehmen? –

+0

@jamesralston 1.dll stellt Typen bereit, die das Bootstrapping für Komponenten in einem Dienst ausführen. Einige dieser Komponenten befassen sich mit dem Routing zu einem bestimmten Dienst und werden daher von vielen anderen Diensten gemeinsam genutzt, die an den Hauptdienst weitergeleitet werden müssen. Die Routingklassen sind in 2.dll. 3.dll enthält die wichtigsten Service-Typen. Der Hauptdienst verwendet also die Methoden in 1.dll, die die Hauptdiensttypen in 3.dll und die Routingkomponenten in 2.dll bootstrappen. Die anderen Dienste verwenden nur die Methoden in 1.dll, die das Routing booten und daher nur Typen aus 2.dll verwenden. –

Antwort

1

Abhängigkeiten werden zur Laufzeit festgelegt, also ja, Sie haben Recht. Ihre Anwendung kann ordnungsgemäß ausgeführt werden, wenn Sie auf eine Baugruppe verweisen, die Sie nie verwenden.

Auszug aus MSDN:

Der Prozess der Lokalisierung und Bindung an eine Baugruppe beginnt, wenn die Laufzeit ein Verweis auf eine andere Baugruppe zu lösen versucht.

Sie können ein gutes Gefühl dafür bekommen, wie die Laufzeit Assemblies aus diesem Artikel findet. Für einen Beweis, wie es funktioniert, überprüfen Sie this blog.

+0

Danke. Das war, was ich dachte, aber ich sah seltsames Verhalten, das damit im Widerspruch stand. Ich denke, wir haben es auf einen 'Assembly.ExportedTypes'-Aufruf zurückverfolgt, bei dem alle Abhängigkeiten geladen wurden. –

Verwandte Themen