Hola, encontramos la respuesta a tu interrogante, deslízate y la obtendrás un poco más abajo.
Solución:
Mi opinión es que el empaquetado de NuGet tiene mucho que ver con las convenciones.
No hay problema en empaquetar los mismos espacios de nombres y los mismos nombres para diferentes plataformas (como en lib/net40/mydll.dll
, lib/net35/mydll.dll
etc. en el mismo paquete), ya que NuGet filtrará las dependencias registradas por plataforma.
Construir varias versiones para la misma plataforma parece poco convencional, esta discusión está sesgada hacia la creación de un paquete por compilación. Eso no significa que no puedas hacerlo, pero primero debes preguntarte si deberías hacerlo.
Dicho esto, si sus compilaciones de depuración y lanzamiento son muy diferentes (compilación condicional, etc.), esto podría ser útil. Pero, ¿cómo elegirán los usuarios finales Liberar o Depurar al instalar su paquete?
Una idea podría ser, una versión por configuración de compilación. Ambos se pueden instalar en el proyecto. Para hacer eso, agregue un archivo de objetivos a su paquete o cree un script de instalación de powershell (no compatible desde Nuget v3) que agrega referencias condicionales directamente en el archivo del proyecto de destino, si desea algo menos básico que cualquier cosa que MsBuild pueda hacer por usted.
Ejemplo de la primera táctica: Cree un archivo .target (en su paquete, cree un build
carpeta y luego crear buildYourLib.targets
con los siguientes contenidos):
..packagesYourLib.1.0.0libDebugYourLib.dll
..packagesYourLib.1.0.0libReleaseYourLib.dll
Siempre que haya creado carpetas de depuración y lanzamiento (la carpeta de la plataforma es opcional), la salida de la compilación cambiará efectivamente según la configuración, siempre que los consumidores de paquetes tengan nombres de configuración convencionales, pero siempre puede extender un poco la lógica de la condición con $ (Configuración). Contiene, etc. o simplemente poner eso en el archivo Léame del paquete
Inspirado por @Tewr, encontré una solución engorrosa pero funcional.
Cree un nuget con la siguiente estructura de archivos:
libnet$(Configuration)YourLib.1.0.0.dll <---- put here some dummy file named YourLib.1.0.0.dll
toolsreleaseYourLib.1.0.0.dll <--- put here the release version
toolsdebugYourLib.1.0.0.dll <--- put here the debug version
buildYourLib.targets
El contenido del archivo de objetivos:
Los dlls en liberación La carpeta se agregará automáticamente como referencias creando lo siguiente en el archivo del proyecto: