2009-07-01 9 views
12

Aus Neugier habe ich 2 Assemblys erstellt, die beide eine Klasse (Class1) mit dem exakt gleichen Namespace (Library1) haben. Ich erstelle dann einen anderen Client, der auf diese 2 Assemblys verweist, und versuche eine Instanz von Class1 zu erstellen.Verwenden Sie Typen mit dem gleichen Namen und Namespace in 2 .NET Assemblies

Der Compiler, nicht überraschend, gibt mir einen Kompilierfehler über die mehrdeutige Referenz. Gibt es eine Möglichkeit, den Typ explizit in der Assembly anzugeben, die ich verwenden möchte, um die Mehrdeutigkeit zu vermeiden?

Hinweis: Ich weiß das selten, wenn überhaupt, passiert in der Praxis. Es ist nur eine Frage aus Neugierde nach Sprachmerkmalen.

Antwort

10

Ich denke, Sie sollten extern alias verwenden, um die Assembly-Namespaces außerhalb des globalen Namespace zu umbrechen. Hier ist, wie:

  1. Im Projekt, das die zwei Baugruppen verweist, wählen Sie eine von ihnen unter Verweise, und im Fenster Eigenschaften ändern, um die Aliase Wert von global zu, sagen wir, global, Library1a.

  2. Tun Sie dasselbe für die andere Referenz, aber geben Sie ihr ein anderes Alias ​​- gehen wir mit global, Library1b für unser Beispiel.

  3. Fügen Sie extern alias Library1a; und/oder extern alias Library1b; als die ersten 2 Zeilen von Klassen ein, die die Assemblys verbrauchen.

  4. Beim Zugriff auf zweideutige Mitglieder den Namespace mit Library1a. oder Library1b. qualifizieren. Beispiele: Library1a.Library1.Class1...Library1b.Library1.Class1...

1

Es passiert in der Praxis und ist ein echten Schmerzen, die externe Alias ​​kann nicht immer das Problem lösen. Hier ist ein Beispiel, wo es ein Problem ist Duplicate Namepsaces.

Verwandte Themen