2011-09-02 18 views
15

Attualmente stiamo creando una soluzione con diversi progetti.Crea pacchetto nuget per una soluzione con più progetti

abbiamo qualcosa di simile:

- Common 
    - Logging 
    - Logging.NLog 
- Threading 

Quindi Logging.NLog dipende registrazione, registrazione sul comune ... ecc.

Quando imballiamo Logging.NLog mi piacerebbe che nuget scopra le dipendenze di Loggin e Common.

Al momento, ho creato un pacchetto con comuni, poi Logging ho installato il Pacchetto comune con

install-package Common 

Ma ogni volta che faccio una modifica comune, devo aggiornare il pacchetto e vengono create dal nostro continuo sistema di integrazione (Hudson), quindi è piuttosto fastidioso quando stiamo sviluppando.

Mi piacerebbe avere semplicemente un riferimento di progetto (Aggiungi riferimenti -> Progetto ...) e il nuget rileva comunque le dipendenze.

C'è un modo per raggiungerlo?

+0

Intendi dire che quando si crea un pacchetto NuGet per il log, si desidera includere una dipendenza al pacchetto per Common, come Common è incluso nel logging via NuGet? –

+0

Possibile duplicato di [Creazione di un pacchetto NuGet da più progetti in un'unica soluzione] (https://stackoverflow.com/questions/15882770/creating-one-nuget-package-from-multiple-projects-in-one-solution) –

risposta

11

C'è un pianificato feature rivolgendosi a questo scenario esatto.

questo è come apparentemente simile:

> nuget.exe pack proj.csproj -IncludeReferencedProjects 

E 'stato apparentemente semplici implementedgiorni fa, ma ci sono bugsstillbeingironedout.

La caratteristica, nella sua forma attuale, permette:

  • confezionamento di manufatti diversi progetti in un singolo package NuGet (camminando progetto riferimenti ricorsivamente),

O

  • creazione pacchetto nuget riferimenti a tali progetti pacchetti associati, se i progetti di riferimento hanno file .nuspec di accompagnamento.

La richiesta di funzionalità risale fino alla 1.5, ma continuava a scivolare. Di recente, tuttavia, ha raccolto una quantità sufficiente di richieste (da richiedere) per la pubblicazione in Nuget 2.3.

I pegs di rilascio versione 2.3 per "Fine aprile 2013", quindi rimanete sintonizzati.
(Attualmente, l'ultima versione di Nuget è 2.2.1).

+2

Sembra funzionare come nella mia versione (2.5.40416.9020), senza alcun bisogno di elementi o nel file .nuspec (proj.nuspec in questo esempio). –

1

Penso che Charles voglia che NuGet risolva automaticamente i riferimenti del progetto nelle dipendenze del pacchetto se tali progetti di riferimento vengono utilizzati anche per costruire i pacchetti NuGet, giusto?

Esempio:

  1. Logging è predisposto per generare un pacchetto NuGet
  2. Logging.Nlog è configurato per generare un pacchetto NuGet
  3. Logging.Nlog ha un riferimento progetto Logging.
  4. Il pacchetto Logging.Nlog generato dovrebbe ottenere una dipendenza dal pacchetto di registrazione generato.

Questo è qualcosa che cercavo anch'io, ma purtroppo ho trovato che non è attualmente supportato. C'è uno work item su di esso, programmato per NuGet 1.7, ma non c'è ancora un disegno su come gestirlo.

+0

Sì hai ragione! Grazie per le informazioni –

1

Questo filo ha un buon suggerimento: NuGet and multiple solutions

Fondamentalmente, rompere i componenti comuni alla propria soluzione, con il loro ciclo di vita rilascio.

1

Attualmente non c'è modo di fare esattamente quello che chiedi, ma quanto segue ti aiuterà a semplificare i tuoi aggiornamenti.

Sembra che sia necessario aggiungere file nuspec alla soluzione. Qualcosa come i seguenti tre file. Nota le dipendenze nella seconda due. Questi si riferiscono alla stessa versione di DLL che è comune a [$ version $]. Ciò significa che quando si esegue il comando seguente, vengono aggiornati tutti e tre poiché le parentesi quadre sulle dipendenze richiedono una versione specifica dei pacchetti dipendenti.

PM> update-pacchetto comune

In Hudson, sarà necessario eseguire questi file nuspec usando il comando pacchetto NuGet (see Nuget command reference) e includere i pacchetti con conseguente vostro artefatti, e distribuirli al server NuGet locale. Lo lascerò a te.

L'altra cosa che dovresti fare è assicurarsi che tutti gli assembly abbiano la stessa versione per la stessa build. Ancora una volta, Hudson può prendersi cura di questo o è possibile utilizzare un file AssemblyInfo comune.

Common.nuspec

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Common</id> 
    <title>Common</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
</metadata> 
<files> 
    <file src="..\Common\bin\Release\Common.dll" target="lib\net40" /> 
    <file src="..\Common\bin\Release\Common.pdb" target="lib\net40" /> 
</files> 
</package> 

Logging.nuspec

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Logging</id> 
    <title>Logging</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
    <dependencies> 
     <dependency id="Common" version="[$version$]" /> 
    </dependencies>   
</metadata> 
<files> 
    <file src="..\Logging\bin\Release\Logging.dll" target="lib\net40" /> 
    <file src="..\Logging\bin\Release\Logging.pdb" target="lib\net40" /> 
</files> 
</package> 

Logging.NLog

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Logging.NLog</id> 
    <title>Logging.NLog</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
    <dependencies> 
     <dependency id="Logging" version="[$version$]" /> 
    </dependencies>   
</metadata> 
<files> 
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.dll" target="lib\net40" /> 
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.pdb" target="lib\net40" /> 
</files> 
</package> 
+0

SÌ! questo forse quello di cui ho bisogno. Lo proverò ora, ma in questo modo potrò avere una soluzione VS con 3 progetti, ognuno dei quali può fare riferimento agli altri nella soluzione, ma quando li impaccheno sono ogni singolo pacchetto con dipendenze dagli altri pacchetti. Ok, vado a provare.grazie – Raif

Problemi correlati