Ho letto una manciata di post (vedi riferimenti sotto) e devo ancora trovare una guida sulle migliori pratiche specifiche per il mio stack tecnologico.Esiste un approccio consigliato alla configurazione di un pacchetto NuGet che utilizza più framework in TeamCity utilizzando MSBuild?
L'obiettivo: Creare un unico pacchetto NuGet mira più framework .NET costruite da un singolo file csproj via TeamCity utilizzando MSBuild e NuGet.
I vincoli:
- tirare il codice dai VCS solo una volta.
- Tutti gli assembly compilati devono essere versionati allo stesso modo.
- Singolo .csproj (non uno per framework di destinazione).
ho due approcci in mente:
creare una singola configurazione di generazione. Contiene tre passaggi di costruzione: compilazione di .NET 3.5, compilazione di .NET 4.0, pacchetto con NuGet. Ogni passo di costruzione sarebbe subordinato al successo dell'ultimo. L'unico vero problema che vedo con questo approccio (e spero che esista una soluzione di cui non sono a conoscenza) è che ogni fase di costruzione richiede il proprio set di parametri di build (ad es. System.TargetFrameworkVersion e system.OputputPath) per designare il posizione unica per la DLL di sedersi (ad esempio, bin \ release \ v3.5 e bin \ release \ v4.0) in modo che il passaggio del pacchetto NuGet sarebbe in grado di fare la sua cosa in base alla sezione File nel file .nuspec.
Creare più configurazioni di build. Una configurazione di build per i passi di costruzione descritti sopra. Con questo approccio, è facile risolvere il problema dei parametri di build TargetFrameworkVersion e OutputPath, ma ora devo creare dipendenze per gli snapshot e condividere il numero di versione dell'assembly tra i build. Mangia anche slot di configurazione build che è ok (ma non ottimale) per noi poiché abbiamo una licenza Enterprise.
Option # 1 sembra la scelta più ovvia. Le opzioni # 2 sono sporche.
Quindi le mie due domande sono:
- E 'possibile creare parametri che sono unici per un passaggio di generazione?
- Esiste un terzo approccio migliore?
Riferimenti:
- 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
Ho raggiunto soluzioni seguendo entrambi gli approcci e pubblicherò risposte separate a breve (come il tempo consente). –
Attendo con fiato sospeso ;-) Per coincidenza sto solo avendo lo stesso requisito. –
Ah ah, Tim. Riconosco il tuo nome dalla discussione di youtrack sull'assemblaggio (http://youtrack.jetbrains.com/issue/TW-27596). Tu e io stiamo seguendo lo stesso problema. Proverò a pubblicare le mie due risposte questa settimana. ;) –