2017-01-27 4 views
0

Ich habe eine Klassenbibliothek (namens ProjectA), die 4,5 Ziele. Es verwendet nicht unbedingt 4.5 spezifische Funktionen. Ich brauche es, um 4.0 und 4.5 Assemblies zu bauen. Ich brauche es, um ein einzelnes NuGet-Paket zu erzeugen, das beide Assembly-Versionen (4.0 + 4.5) hat. Es wird von einer anderen Klassenbibliothek (ProjectB) konsumiert, die ebenfalls auf 4.5 abzielt.Seamless NuGet Version Integration zwischen .NET 4 und 45 Projekte

Ich brauche auch ProjectB, um das gleiche zu tun (Build-Output-Baugruppen für 4.0 und 4.5) und erstellen Sie ein einzelnes NuGet-Paket, das beide unterstützt.

Ich habe hinzugefügt, um zusätzliche Build-Konfigurationen für 4,0 bis beide ProjectA und ProjectB Projekte:

enter image description here

In ProjectB, ich habe auch die zusätzliche Abhängigkeit und Dateien in die .nuspec Datei hinzugefügt, die verwendet wird zu definieren, auf dem dependecy NuGet von ProjectA:

enter image description here

ProjectA gerade fein baut und erzeugt ein NuGet .nupkg die beide Binärdateien hat (eine für 4.0 und auf e für 4.5). Wenn ProjectB ProjectA verbraucht, bringt es die 4.5-Assembly von ProjectA ein. Wenn ProjectB die Version 4.5 seiner eigenen Assembly kompiliert, ist alles in Ordnung.

Hier wird es knifflig. Wenn ich ProjectB umgebe, um seine 4.0-Build-Konfiguration zu verwenden, wird Visual Studio mir sagen, dass meine Referenz auf ProjectA 4.5 ist, und kann nicht mit Build-Konfiguration 4.0 von ProjectB erstellt werden.

Ich möchte, dass Visual Studio automatisch die 4.0-Assembly von ProjectA verwendet, wenn die Buildkonfiguration in ProjectB in 4.0 geändert wurde.

Ich kann nicht 4.5 zu 4.0 herunterstufen, um alles nahtloser zu machen. Schließlich wird ein ProjectC beide Bibliotheken 4.0-Assemblys konsumieren. Weil ProjectC 4.0 anvisiert und nicht geändert werden kann.

Wie bekomme ich ProjectB, um ProjectA zu konsumieren, so dass ProjectB die richtige Assembly (4.0/4.5) von ProjectA verwendet, abhängig davon, welche Build-Konfiguration ProjectB verwendet.

+2

können Sie versuchen, zwei verschiedene Konfigurationen erstellen, eine für .net 4.0 und eine für .net 4.5 und dann bedingte Referenzen in csproj verwenden. Beispiel: http://stackoverflow.com/questions/6523008/visual-studio-2010-conditional-references – MistyK

+0

@Zbigniew Vielen Dank. Dein Kommentar hat enorm geholfen. Ich musste herausfinden, dass ich auch zwei verschiedene REFERENZEN erstellen konnte, die sich auszubreiten schienen. Ich habe Ihren Kommentar aktualisiert.Wenn du dies als Antwort mit mehr Details eingibst (bitte nimm es, um meine zu stehlen), würde ich gerne deine Antwort markieren. –

+0

kein Problem, ich werde Ihre Antwort als Antwort markieren, da es alle Details enthält. – MistyK

Antwort

1

Nach ein paar weiteren Stunden der Forschung, und zu meinen Kollegen (und einem Kommentar von @bzgigiew) besuchte ich, um festzustellen, dass ich die Projektdatei für ProjectB aktualisieren musste. Effektiv musste ich dem Projekt mitteilen, welche Referenz basierend auf einer CONDITIONAL-Anweisung in der Projektdatei für zwei verschiedene/separate Referenzen zu den Binärdateien von ProjectA (4.0/4.5) verwendet werden sollte.

Der Abschnitt hilft zu definieren, welche Referenzen mit dem Projekt verknüpft sind. Das selbst kann abhängig von einer Vielzahl von Bedingungen optional gemacht werden. In meinem Fall musste ich die Bedingung setzen, um zu sagen, wenn die Erstellungskonfiguration "Release40" ist, benutze die 4.0 Assembly von der. Und eine andere Referenz sagt, wenn die Build-Konfiguration "Release" ist, verwenden Sie die 4.5-Assembly von einem anderen.

enter image description here

+0

froh zu wissen, dass Sie dieses Problem gelöst haben, danke für Ihre Freigabe. Du könntest es als Antwort markieren :) –

Verwandte Themen