2016-01-14 8 views
6

Ich wollte zwei verschiedene Version der gleichen Bibliothek (OpenCVSharp 2.x und OpenCVSharp 3.x) Nun habe ich diese beiden Pakete beide auf das separate Projekt heruntergeladen (nennen wir es OCV2Wrapper und OCV3Wrapper) und referenzieren beide Wrapper in meinem Projekt. Ich musste Bibliotheken von einem Paket (2.x) umbenennen und sie manuell referenzieren, weil: Can we add 2 different versions of same package in NuGet. Ich lese über externe Aliase und ich benutzte externen Alias ​​in einem der Wrapper (2.x in meinem Fall). Aber ich habe einige große Probleme:Mit zwei verschiedenen Versionen der gleichen nuget Paket

  • Meine umbenannt Bibliotheken sind nicht auf die Einführung Projekt Build kopiert (das eine, die beide Umhüllungen verweisen), sondern ist in Build der Wrapper 2.x
  • Es arbeiten nicht weil es doch sagt, dass ich keinen Typ von meinem 2.x-Wrapper finden kann, selbst wenn ich meine umbenannten Bibliotheken manuell vom 2.x-Wrapper kopiere.

Was ist der richtige Ansatz für dieses Szenario in C#?

Ich möchte beide Wrapper in Lösung verwenden, weil Version 2.x Algorithmen (SIFT und SURF) enthält und 3.x Verison Algorithmen (Kaze und AKaze) enthält. Ich kann leben, dass beide Pakete aus nugget wären, aber ich bevorzuge, dass 3.x von nuget ist und 2.x-Version manuell konfiguriert wird.

+0

Sie haben angegeben, dass Sie in Ihrer Lösung mindestens drei Projekte erstellt haben, richtig? Die Einschränkung der von Ihnen geposteten Frage bezieht sich auf ein Projekt.Sie können verschiedene Versionen eines nugget-Pakets problemlos verschiedenen Projekten hinzufügen. Und solange Ihre beiden Projekte den Code des nugget-Pakets verarbeiten und Sie die beiden in Ihrem dritten Projekt referenzieren, sollte alles in Ordnung sein. –

+1

OK, ich verstehe. ABER wenn ich das tue (benutze zwei Wrapper für zwei verschiedene Bibliotheken), dann habe ich in meinem Build des ausführbaren Programms keine Bibliotheken von 2.x Wrapper (die manuell von browse Datei referenziert und umbenannt werden, so dass ich einen Namensüberschreibungskonflikt verhindern würde) – LightCZ

+0

Bestätigt das Verhalten, ich sehe auch nicht Nuget automatisch die niedrigere Version Bibliothek –

Antwort

0

OK, also löse ich das, indem ich den gesamten Quellcode für die 2.X-Wrapper-Version herunterlade. Benannte seinen Namespace in ABCDEF2, wobei ABCDEF der ursprüngliche Namespace war. Erstelle mein eigenes nugget Paket mit meinem eigenen Schlüssel und veröffentliche es auf unserem privaten nugget Server. Das ist so eine lahme Lösung, aber es gibt keinen anderen Weg, als die Originalpakete manuell herunterzuladen und direkt mit einem anderen Dateinamen usw. zu referenzieren, und Sie verlieren die Vorteile von nuget.

5

Wie bereits erwähnt, ist es nicht falsch, zwei verschiedene Versionen eines Nugget-Pakets zu referenzieren, solange diese Referenzen in verschiedenen Visual Studio-Projekten enthalten sind.

Aber das ist auch, wo der einfache Teil endet, aber ich denke, es gibt ein paar Optionen übrig. Abhängig von Ihren Bedürfnissen sehe ich die folgenden Optionen.

  1. Erstellen Sie einen Post-Build-Schritt, der die multi-versionierten Assemblys im GAC registriert. Solange jede Baugruppe eine andere Montageversion hat, holt die CLR bei Bedarf die richtige Baugruppe aus dem GAC.
  2. Posting erstellen Build-Schritt, den die verschiedenen Baugruppen in einen Unterordner von Ihnen Anwendung Binärordner wie sind/Paket-v1 und ist/Paket-v2 kopieren. Dann können Sie in Ihrer Anwendung das AssemblyResolve Ereignis überschreiben, wie hier beschrieben https://msdn.microsoft.com/en-us/library/ff527268(v=vs.110).aspx. Dadurch können Sie die Baugruppe zum richtigen Zeitpunkt in der richtigen Version laden.
  3. Wenn Sie wollen Sie nicht spielen, um mit AssemblyResolve, dann können Sie Ihre web/app.config auch ändern Montage zu tun umleiten/Sondierung hier wie beschrieben https://msdn.microsoft.com/en-us/library/4191fzwb(v=vs.110).aspx

hoffe, das hilft ein Bit, damit Sie beim nächsten Mal den Quellcode von Drittanbietern nicht ändern müssen.