2016-07-08 8 views
1

Ich habe ein Projekt, das auf einem externen Programm abhängt, hat dieses externe Programm eine API, eigentlich hat es etwa 17 verschiedene APIs alle leicht für die Version 2000-2017. Nun möchte ich in diesen 17 Versionen ungefähr 5 von ihnen unterstützen. (2012-2017) aber es gibt einige Eigenschaften, die in 2012 waren, die seitdem in 2017 umbenannt worden sind.Wie Referenz auf zwei Versionen der gleichen API in Visual Studio/c hinzufügen #

Jetzt die guten Nachrichten ist, dass ich trivially feststellen kann, welche Version des Programms ein gegebener Benutzer und irgendwelche geteilten Funktionen benutzt (90% +) kann mit einem Verweis auf eine andere Version der API aufgerufen werden. Allerdings brauche ich einige der restlichen 10% der Features. Also muss ich die Verweise auf mehrere APIs einschließen, damit mein Programm kompiliert und dann zur Laufzeit auswählen kann, welche Version es empfängt.

Nun, was ich versucht habe, ist in das Visual Studio (2015 Community-Version) zu gehen und einen Verweis auf mehrere von ihnen hinzuzufügen. In dem Moment, in dem ich versuche, eine zweite Referenz hinzuzufügen, erhalte ich eine Fehlermeldung: a reference to [API.dll] could not be added a reference to the component [API.dll] already exists in project..

Ich möchte, dass die Methode so verwendet wird, dass, wenn eine Funktion mit einem bestimmten Namen in einer der Versionen existiert, sie an diese gebunden sein sollte und wenn ein bestimmter Funktionsname in mehreren APIs vorhanden ist, sollte sie an die letzte binden . Irgendeine Idee, wie man das macht? Vielleicht etwas mit dem externen Alias-Keyword? Ich schaute auf How to reference two versions of an API? und die akzeptierte Antwort wird nicht funktionieren, aber die zweite Antwort könnte, jeder in der Lage zu erklären, ob dieser funktioniert und wenn ja, wie es richtig geht?

+0

Sorry für die Wand des Textes. – Thijser

+0

Nicht möglich ... –

+0

Überhaupt nicht, oder nicht mit Ausnahme? – Thijser

Antwort

2

Grundsätzlich ist es nicht erlaubt, mehrere Referenzen mit demselben Namen hinzuzufügen.

Wenn Sie der Assembly Owner sind, müssen Sie den Dateinamen im Manifest ändern, um DLLs mit anderen Namen zu generieren.

Sie können die Baugruppenversion auch in der Konfigurationsdatei oderload at runtime verwalten.

Mein Vorschlag ist, alle DLLs in einer einzigen Datei zusammenzuführen. Sie können dazu ILMerge verwenden.

+0

Wen zitieren Sie hier? Sie sollten dem ursprünglichen Autor danken. Oder, wenn sie Ihre Wörter sind, entfernen Sie die Blockquote. –

+0

blockquote bedeutet? @CodyGray –

+0

Sie erhalten eine Blockquote, indem Sie den Absätzen '' 'voranstellen. Es ist dieser gelbe Hintergrund mit einem linken Rand, der auftaucht. Semantisch wird es verwendet, wenn Sie jemand anderen zitieren. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote –