Ich habe eine Handvoll Posts gelesen (siehe Referenzen unten) und muss noch einen Leitfaden zu Best Practices finden, der speziell für meinen Tech-Stack gilt.Gibt es einen empfohlenen Ansatz zum Konfigurieren eines NuGet-Pakets, das auf mehrere Frameworks in TeamCity mit MSBuild abzielt?
Das Ziel: Erstellen Sie ein einzelnes NuGet-Paket, das auf mehrere .NET-Frameworks abzielt, die aus einer einzelnen .csproj-Datei über TeamCity mit MSBuild und NuGet erstellt werden.
Die Einschränkungen:
- den Code aus dem VCS nur einmal ziehen.
- Alle kompilierten Baugruppen sollten identisch versioniert werden.
- Einzelne .csproj (nicht eine pro Zielframework).
Ich habe zwei Ansätze im Sinn:
Erstellen Sie eine einzelne Build-Konfiguration. Es würde drei Build-Schritte enthalten: .NET 3.5 kompilieren, .NET 4.0 kompilieren, mit NuGet packen. Jeder Bauschritt wäre vom Erfolg des letzten abhängig. Das einzige wirkliche Problem, das ich bei diesem Ansatz sehe (und hoffentlich gibt es eine Lösung, die mir nicht bekannt ist) ist, dass jeder Build-Schritt eine eigene Reihe von Build-Parametern benötigt (zB system.TargetFrameworkVersion und system.OutputPath) eindeutiger Speicherort für die DLL (z. B. bin \ release \ v3.5 und bin \ release \ v4.0), damit der NuGet-Pack-Schritt seine Aufgabe basierend auf dem Abschnitt "Files" in der .nuspec-Datei ausführen kann.
Erstellen Sie mehrere Build-Konfigurationen. Eine Build-Konfiguration für die oben beschriebenen Build-Schritte. Mit diesem Ansatz ist es einfach, das TargetFrameworkVersion- und das OutputPath-Buildparameterproblem zu lösen, aber ich muss nun Snapshot-Abhängigkeiten erstellen und die Assemblyversionsnummer über die Builds hinweg teilen. Es verschlingt auch Build-Konfiguration Slots, die für uns ok (aber nicht optimal) ist, da wir eine Enterprise-Lizenz haben.
Option # 1 scheint die offensichtliche Wahl zu sein. Optionen # 2 fühlt sich schmutzig an.
Also meine beiden Fragen sind:
- Ist es möglich, Parameter zu erstellen, die zu einem Build-Schritt einzigartig sind?
- Gibt es einen dritten, besseren Ansatz?
Referenzen:
- Multi-framework NuGet build with symbols for internal dependency management
- Nuget - packing a solution with multiple projects (targeting multiple frameworks)
- http://lostechies.com/joshuaflanagan/2011/06/23/tips-for-building-nuget-packages/
- http://msdn.microsoft.com/en-us/library/hh264223.aspx
- https://stackoverflow.com/a/1083362/607701
- http://confluence.jetbrains.com/display/TCD7/Configuring+Build+Parameters
- http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package
Ich habe Lösungen nach beiden Ansätzen erreicht und werde bald (wenn es die Zeit erlaubt) separate Antworten veröffentlichen. –
Ich warte mit angehaltenem Atem ;-) Zufällig habe ich nur die gleiche Anforderung. –
Ha ha, Tim. Ich erkenne Ihren Namen aus der Diskussion über die Montage-Infotequenz (http://youtrack.jetbrains.com/issue/TW-27596). Du und ich folgen demselben Problem. Ich werde diese Woche meine zwei Antworten posten. ;) –