Typ existiert in 2 Baugruppen
Erstellt habe ich zwei .NET-Interop-Assemblys, die aus zwei verschiedenen Drittanbieter-COM-DLLs. Sowohl der COM-DLLs enthalten einen Typ mit dem Namen COMMONTYPE
. Daher COMMONTYPE
ist nun bekannt, durch die zwei Interop-Assemblys als gut.
Habe ich ein drittes Projekt, das muss die Verwendung dieser beiden Interop-Assemblys, und ich bekomme den berüchtigten compile-Zeit-Fehler:
Art
<ABC>
existiert in beiden<ASSEMBLY1.dll>
und<ASSEMBLY2.dll>
Da die COM-DLLs von einem Drittanbieter habe ich keinen Zugriff auf den Quellcode, und ich Schreibe ein C# Konsole-Anwendung, was bedeutet, ich habe keine web.config-Datei, wo ich hinzufügen könnte, die debug=false
Abhilfe. Was kann ich tun?
InformationsquelleAutor der Frage Kou S Hal | 2012-02-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, das ist alt, aber es gibt einen einfacheren Weg, als die aufgeführten. Dies funktioniert, wenn Sie auf zwei Baugruppendass der Anteil Arten mit der genaue gleichen Namen und namespace.
Wenn Sie mit der rechten Maustaste auf den Verweis auf die DLL und wählen Sie Propeties, werden Sie sehen, dass hier eine Eigenschaft, die man als "Aliase"
Den default-Wert ist "global". Für eine der konfligierenden Baugruppen ändern Sie diese auf einen anderen Wert. In dem Beispiel unten, ich habe es geändert von "global" auf "Ziel".
Nächsten, in Ihr code-Datei, müssen Sie die extern-Schlüsselwort verwenden Sie diesen alias als root-level-namespace für diese Typen. In diesem Beispiel würden Sie den folgenden an der Spitze von Ihr .cs-Datei:
Nun, in dieser Datei können Sie auf beide Arten.
InformationsquelleAutor der Antwort Tom
Es sei denn, die namespaces der Anbieter sind identisch (unwahrscheinlich), die type-Definitionen tatsächlich getrennt sein. Was Sie tun müssen (und dies ist eine vollständige PITA manchmal) erstellen Sie eine namespace-alias in deiner Anweisung verwenden, anstatt einfach die Anwendung der Anweisung carte blanche. Dies wird Ihnen ermöglichen, zu re-identifizieren Sie die namespaces:
Dieses bedeutet, dass mithilfe der speziellen alias für alle Arten, die in jedem namespace für diese Anbieter.
InformationsquelleAutor der Antwort Joel Etherton
Alte Frage, fand aber eine einfachere Möglichkeit...
Wählen Sie die Referenz, die Sie verwenden möchten...
Unter Eigenschaften, ändern Sie die Aliasnamen für 'xyz'
Jetzt in code-Zeile oben hinzufügen:
dann hinzufügen mit:
oder auf andere Weise zu verwenden mit:
nun sollten Sie in der Lage sein, den Verweis explizit als unten:
oder
InformationsquelleAutor der Antwort Zunair
können Sie einen alias für die verschiedenen Namensräume und/oder Arten:
hier ist, wie es Aussehen würde:
MSDN
InformationsquelleAutor der Antwort Igarioshka
Vielleicht kann man einen trick anwenden, indem Sie ein
namespace
einer der Baugruppen, die in diesem Fall vollständig qualifizierten Namen einerCOMMONTYPE
wird nicht gleich zu einem anderen, und möglicherweise es könnte Ihr problem beheben mit Konflikten Auftritt in der 3. DLL.Hoffe, das hilft.
InformationsquelleAutor der Antwort Tigran