2016-06-14 16 views
1

Ich erstelle ein NuGet-Paket in C++/CLI geschrieben. Es dient als Interop zwischen C# und nativem C++.NuGet Interop Pacakge Richtlinien rund um Debug und Release erstellt

Die erstellte DLL hat eine verwaltete Oberfläche und eine native Implib-Oberfläche.

Visual Studio verbraucht nur eine einzelne Referenzbaugruppe aus einem NuGet-Paket, keine andere Referenzbaugruppe pro Debug- oder Release-Konfiguration des empfangenden Projekts.

Ich möchte, dass die vom Assembly NuGet konsumierte Referenzbaugruppe je nach Konfiguration unterschiedlich ist, sodass ich sowohl eine Debug- als auch eine Release-DLL in nupkg einbetten kann und Release C# -Builds an die Release-DLL bindet und an Debug-C# -Builds bindet die Debug-DLL.

Dies ist eine Voraussetzung für mich, weil es scheint, dass das native Binärobjekt-Layout von std C++ - Klassen (zum Beispiel std :: string) sich zwischen meinen Debug und Release-Builds unterscheidet.

Die Release-Kompilierung der DLL funktioniert nicht mit der Debug-Kompilierung des Rests des Programms. Ich erhalte ähnliche Fehler mit den Debug-Kompilieren der DLL- und Release-Kompilierungen des Programms.

Kann ich hier etwas machen? Ich habe ein wenig untersucht, wie ich die Referenzelemente in die Dateien NuGet .props oder .targets setze und die Eigenschaft $ (Configuration) verwende, aber das habe ich noch nicht zum Laufen gebracht.

+2

Kaum das einzige Problem, Sie erhalten genau die gleichen Probleme, wenn der Bibliotheksbenutzer eine andere VS-Version hat. Dies sollte * nie * ein Problem in einem C++/CLI-Projekt sein, Sie stellen nur die verwaltete Schnittstelle zur Verfügung. Wie Ihr C++ - Code aussieht, muss immer ein Implementierungsdetail sein, daher spielt es keine Rolle, dass Sie die Release-Build-Version bereitstellen. –

Antwort

1

Ich habe das vielleicht gerade erst zur Arbeit gebracht, obwohl ich zugeben werde, dass ich nicht sicher bin, wie gut das zu einem echten Weltprojekt führen wird.

Mein Interop NuGet Paket:

  1. bettet beide Debug und Release-DLLs in lib \ nativen \ debug \ und lib \ nativen \ release \ sind.
  2. Hat eine .props Datei, die ein <ItemGroup><Reference> an die DLL enthält, zusammen mit einem <HintPath> zu $(MSBuildThisFileDirectory)..\lib\native\$(Configuration)\[DLL Name]

Dies konnte erfolgreich Debug oder Veröffentlichung NuGet DLL binden, abhängig von der Build-Konfiguration.