¿Empaquetando proyectos de NuGet compilados en modo de lanzamiento?

109

¿Hay alguna forma de crear un paquete NuGet utilizando código compilado en modo de lanzamiento? ¿O hay alguna razón por la que solo debería publicar (hacer disponibles localmente, en este caso) paquetes compilados en modo de depuración?

Cada vez que llamo nuget packdesde el directorio de mi proyecto, donde tengo el archivo nuspec a continuación, en el código que solo he compilado en modo de lanzamiento, se queja de no encontrar la DLL en la carpeta de depuración ( "\bin\Debug\SomeProject.dll"). Si lo compilo en modo de depuración, esos archivos están ahí y los empaqueta como debería.

<?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>
patridge
fuente

Respuestas:

207

Puedes resolverlo así: NuGet.exe pack Foo.csproj -Prop Configuration=Release( la referencia ).

Giorgi
fuente
10
Para cualquiera que quiera la historia corta del enlace (buena lectura, sin embargo), hubo un cambio de v1.3 a v1.4 que va de un lanzamiento predeterminado a un valor predeterminado extraído de una configuración de proyecto que solo se puede modificar en el archivo del proyecto directamente (sin opción VS GUI). Para evitar la modificación de la propiedad de la línea de comandos para todas las nuget packllamadas futuras , edite el archivo XML del proyecto en su editor de texto favorito.
patridge
4
¿Hay alguna manera de empaquetar una versión de lanzamiento y una versión de depuración en un paquete y luego hacer que mi proyecto use automáticamente la versión de depuración frente a la versión de lanzamiento, dependiendo de si estoy en la configuración de la solución de depuración o de versión?
JD
2
Si simplemente desea símbolos de depuración para su paquete, puede incluir sus archivos PDB en * .nuspec (por ejemplo, <file src="bin\Release\*.pdb" target="lib\net40\" />) o publicar un paquete de símbolos junto con su paquete DLL.
Patridge
1
@Giorgi enlace caducado
Weipeng L
1
@JD También quiero empaquetar tanto Debug como Release, y he encontrado esto: stackoverflow.com/questions/37673692/…
Peter-Yu
16

Si está utilizando un evento posterior a la compilación y desea crear un paquete, ya sea utilizando la configuración de depuración o versión, puede configurar la línea de comandos del evento posterior a la compilación de la siguiente manera:

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

Para que NuGet use automáticamente el modo de lanzamiento cuando se ejecuta nuget pack, haga lo siguiente:

  1. Abra su .csprojarchivo en un editor de texto.
  2. Busque la siguiente línea:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. En esta línea, reemplace Debugcon Release.
  4. Guardar cambios.
Sam
fuente
0

Las respuestas aquí son buenas, pero estaba teniendo muchos problemas con esto para un proyecto .NET Standard. Tenía un proyecto que solo iba a publicar binarios de lanzamiento, pero no respetaba mi ruta de salida de compilación predeterminada.

Agregué esto a mi CSProj que luego me permitió usar la respuesta aceptada aquí .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
kayleeFrye_onDeck
fuente