Klasse mit gleichem Namen in zwei Baugruppen (absichtlich)
Ich bin in den Prozess der Migration eine Bibliothek, die in C++ geschrieben und hat einen C# - wrapper. Die C# - wrapper - ( LibWrapper
) hat eine Reihe von Klassen mit namespaces, wie:
namespace MyNamespace
class MyClass
class MyOtherClass
Meine neue Bibliothek, LibraryCS
enthält die gleichen namespaces und Klassennamen als LibWrapper
(pro Benutzer-Anforderung), so dass ich auch haben:
namespace MyNamespace
class MyClass
class MyOtherClass
Nun, dass die migration fertig ist, ich bin in den Prozess der Erstellung ein test, der vergleicht die Ergebnisse der Verwendung der beiden Bibliotheken, die zur Validierung der migration. Jedoch, wenn ich versuche, Referenz MyNamespace.MyClass
bekomme ich einen compiler-Fehler (versprochen!) das sagt "MyNamespace.MyClass definiert ist, in beiden LibWrapper und LibraryCS".
Gibt es irgendeinen trick, um das Problem, dass mir erlaubt die Verwendung von zwei Klassen mit den gleichen Namen, aber aus verschiedenen Baugruppen, die in der gleichen client-code?
Alternativ gibt es irgendeine andere Möglichkeit, dies zu testen?
Umbenennung der migrierten namespace zu so etwas wie MyNamespace2
wird natürlich funktionieren, aber wir wurden gebeten, es nicht zu tun, um den client-code einfacher zu migrieren.
InformationsquelleAutor der Frage pgb | 2010-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine extern alias Referenz-Typen mit den gleichen voll qualifizierten Namen aus verschiedenen Baugruppen. Wählen Sie die Referenz zu LibraryCS-und update-Aliase in der Eigenschaften-Seite von "global" auf "LibraryCS", und fügen Sie
extern alias LibraryCS;
an die Spitze der Quellcode-Datei, und dann können SieLibraryCS::MyNamespace.MyClass
zu finden, um die Klasse in LibraryCS. Sie könnenMyNamespace.MyClass
oderglobal::MyNamespace.MyClass
zu finden, um die Klasse in LibWrapper, oder Sie können einen alias für das Referenz-als auch.InformationsquelleAutor der Antwort Quartermeister
In der Reihenfolge zu laden, die diese beiden Klassen in der selben EXE, könnten Sie laden Sie Sie in einer separaten Anwendungsdomäne. Damit würden Sie überprüfen Sie die Montage, dann vollständig entladen und laden Sie die zweite ein und testen Sie es.
Einzelheiten hierzu finden Sie unter Gewusst wie: Laden von Assemblys in einer Anwendung Domain und Entladen von Anwendungsdomänen.
InformationsquelleAutor der Antwort Reed Copsey
Sah diese Frage und Antwort und es hat mir geholfen. Wie auch immer, für diejenigen, die brauchen eine ausführliche Erklärung auf der gleichen, gefunden habe ich ein linkdie wirklich nützlich ist.
Auszug aus dem link.
Mit verschiedenen Versionen der gleichen dll in eine Anwendung
Schritt 1: mit dem VS IDE. Fügen Sie den Verweis auf die Dll-Dateien in der client-Anwendung Lösung. Klicken Sie dann im Projektmappen-Explorer unter dem bezugsknoten wählen Sie die erste (alte version) - Klasse Bibliothek. In das Eigenschaftenfenster ändern Sie die Aliase Feld aus globalen zu oldVer. lly, newVer für die Newer version.
Schritt 2: verwenden Sie den folgenden code als erste Anweisungen, wo Sie planen, zu verweisen
nun zu verwenden,
Hoffe, das hilft.
InformationsquelleAutor der Antwort Hybridzz
Sie laden konnte die erste Versammlung zur Laufzeit verwenden Sie dann die Reflexion zu instanziieren und auszuführen, es ist Methode. Dann entladen, Montage, laden Sie die zweite Baugruppe, und verwenden Sie reflektion, um es zu erstellen und zu betreiben Ihre Methoden.Es wäre wahrscheinlich einfacher für die Verwendung von 2 getrennten Prozessen vergleichen Sie dann die resultierende Ausgabe...
InformationsquelleAutor der Antwort Arnshea C