Imballaggio di progetti NuGet compilati in modalità di rilascio?


109

C'è un modo per creare un pacchetto NuGet usando il codice compilato in modalità di rilascio? O c'è qualche motivo per cui dovrei pubblicare (rendere disponibile localmente, in questo caso) solo pacchetti compilati in modalità debug?

Ogni volta che chiamo nuget packdalla directory del mio progetto, dove ho il file nuspec di seguito, sul codice ho compilato solo in modalità di rilascio, si lamenta di non trovare la DLL nella cartella di debug ( "\bin\Debug\SomeProject.dll"). Se lo compilo in modalità debug, quei file ci sono e li impacchetta come dovrebbe.

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <iconUrl>http://somewhere/project.png</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>$description$</description>
    </metadata>
</package>

Risposte:


207

Puoi risolverlo in questo modo: NuGet.exe pack Foo.csproj -Prop Configuration=Release( il riferimento ).


10
Per chiunque desideri il racconto dal collegamento (buona lettura, però), è stata apportata una modifica dalla v1.3 alla v1.4 che va da un'impostazione predefinita di Release a un'impostazione predefinita estratta da un'impostazione di progetto che può essere modificata solo in direttamente il file di progetto (nessuna opzione VS GUI). Per evitare la modifica delle proprietà della riga di comando per tutte le nuget packchiamate future , modifica il file XML del progetto nel tuo editor di testo preferito.
patridge

4
Esiste un modo per creare un pacchetto sia di una versione di rilascio che di una versione di debug in un unico pacchetto e quindi fare in modo che il mio progetto utilizzi automaticamente quella di debug rispetto a quella di rilascio a seconda che sia nella configurazione di debug e soluzione di rilascio?
JD

2
Se vuoi semplicemente dei simboli di debug per il tuo pacchetto, puoi includere i tuoi file PDB in * .nuspec (ad esempio <file src="bin\Release\*.pdb" target="lib\net40\" />) o pubblicare un pacchetto di simboli insieme al tuo pacchetto DLL.
patridge

1
@Giorgi link scaduto
Weipeng L

1
@JD Voglio anche impacchettare sia Debug che Release , e ho trovato questo: stackoverflow.com/questions/37673692/…
Peter-Yu

16

Se stai utilizzando un evento post-build e desideri creare un pacchetto utilizzando la configurazione Debug o Release, puoi impostare la riga di comando dell'evento post-build in questo modo:

"<path to nuget tools>\NuGet.exe" pack "$(ProjectPath)" -Prop Configuration=$(ConfigurationName)

10

Per fare in modo che NuGet usi automaticamente la modalità di rilascio durante l'esecuzione nuget pack, eseguire le operazioni seguenti:

  1. Apri il tuo .csprojfile in un editor di testo.
  2. Trova la seguente riga:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. In questa riga, sostituire Debugcon Release.
  4. Salvare le modifiche.

0

Le risposte qui sono buone, ma ho avuto molti problemi con questo per un progetto .NET Standard. Avevo un progetto che avrebbe pubblicato solo binari di rilascio, ma non rispettava il mio percorso di output di compilazione predefinito.

L'ho aggiunto al mio CSProj che poi mi ha permesso di utilizzare la risposta accettata qui .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.