2016-07-24 9 views
0

ich arbeite gerade an einem Programm, das mehrere .dll's als Referenz verwendet. Es hat alles gut geklappt, aber gestern habe ich einen neuen Verweis hinzugefügt, und ich habe einen Fehler in einem Objekt, das ich von einer anderen Referenz verwendet, und es sagte, dass dieses Objekt in beiden DLL-Dateien definiert ist. Ich habe versucht, die andere Referenz zu entfernen, aber ich brauche, was in dieser Referenz ist, so muss ich irgendwie umgehen. Ich suchte online, aber ich fand keine gute Lösung, da es scheint, dass nicht viele dieses Problem haben! Aus diesem Grund wird die Hilfe eines erfahrenen Programmierers mehr denn je benötigt, aber ich schätze natürlich jede Hilfe :)2 Referenzen haben die gleichen Objekte/Namespaces definiert

+2

Mögliche Duplikat [eine mehrdeutige Referenz auflösen] (http: // Stackoverflow .com/questions/14141043/resolving-an-ambiguous-reference) –

Antwort

1

Es ist sehr schlecht, dieselbe Klasse in zwei verschiedenen Assemblies im selben Namensraum zu definieren. Sie haben bereits herausgefunden warum. Davon abgesehen gibt es einen Mechanismus, der es ermöglicht, die als externe Aliase bezeichneten Referenzen zu disambiguieren.

Nehmen wir an, dass Sie eine Konsole-Anwendung haben, die zwei Baugruppen verweist, die die gleiche Klasse Foo.SomeClass (ClassLibrary1 und ClassLibrary2) enthalten. In dem Projekt, in dem Sie die Klasse verwenden möchten, wählen Sie die Montagereferenz und im Eigenschaftenfenster einen Alias ​​(zusätzlich zu den Standard global Alias) definieren:

enter image description here

das gleiche für die zweite Baugruppe Referenz Sie und verwende einen anderen Aliasnamen.

Jetzt können Sie die Montage Aliase verwenden, die Sie auf den Referenz vorgesehen, um die, die Klasse angeben, Sie beziehen sich auf:

extern alias assembly1; 
extern alias assembly2; 

using FirstClass = assembly1::Foo.SomeClass; 
using SecondClass = assembly2::Foo.SomeClass; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var c1 = new FirstClass(); 
      var c2 = new SecondClass(); 
     } 
    } 
} 
Verwandte Themen