2012-04-05 12 views
11

Soy un poco novato en NuGet y vengo del mundo de Maven.Encontrar licencias de terceros con Nuget

Recientemente me han encargado la actualización de la información de licencia de terceros para nuestros proyectos. Trabajando con los proyectos de Maven, he podido usar el complemento license:download-licenses para obtener la información de la licencia.

Lo que me pregunto es si hay una forma de obtener esta información usando Nuget? Preferiblemente usando la interfaz de línea de comando para poder automatizarlo en un nivel de construcción CI. Para eliminarlo del gran paso de precompilación manual.

EDIT:

Como yo no era capaz de encontrar ninguna utilidad para hacer esto que arme el LegSec command line utility.

+0

¡Gracias por publicar el enlace a su proyecto! Usé LegSec hoy ... el uso de la línea de comandos fue un poco difícil de entender (algunos de prueba + error), pero la funcionalidad era genial. – crimbo

+0

Aparentemente saben cómo hacerlo desde 2013, simplemente nunca se ha expuesto de forma programática: https://blog.nuget.org/20131011/friendly-license-names.html. Abrí un problema que podría desear recivir: https://github.com/NuGet/Home/issues/5793. –

Respuesta

11

Por lo que sé, no hay nada actualmente disponible para obtener la información de la licencia directamente desde la línea de comandos como parte de una compilación de CI. Debería crear una aplicación para abrir el archivo zip .nupkg, extraer el URL de la licencia del archivo .nuspec y descargar la licencia de esta url.

Alternativamente, podría usar la ventana de la consola del gestor de paquetes dentro de Visual Studio y con un poco de PowerShell descargar los archivos de licencia.

A continuación se muestra un ejemplo simple que obtiene el archivo de licencia para todos los paquetes en un proyecto. Debería ampliarse para obtener todos los proyectos en la solución que debería poder hacer con el cmdlet Get-Project. Esto aún requeriría que alguien ejecute el script para descargar las licencias.

$wc = New-Object System.Net.WebClient 
Get-Package -ProjectName YourProject | ForEach-Object { 
    $wc.DownloadFile($_.LicenseUrl, 'd:\licenses\' + $_.Id + ".html") 
} 
+2

Solo una nota: en VS2015 'LicenseUrl' siempre devuelve una cadena vacía. La documentación de NuGet dice que 'LicenseUrl' estará obsoleto desde v3.x en wards, pero no menciona ninguna alternativa –

+2

LicenseUrl ha sido agregado nuevamente en NuGet 3.4 o superior. –

0

me las arreglé para obtener la información de licencia con el siguiente comando:

@(@(Get-Project -All | ForEach-Object { 
    Get-Package -ProjectName $.ProjectName 
}) | Select Id -Unique) | ForEach-Object { 
    $pkg = $_ 
    $pkgId = $_.Id 
    if ($pkgId -notlike 'microsoft*') { 
     $url = Open-PackagePage $pkgId -License -WhatIf -PassThru 
     Write-Host "$pkgId $url" 
    } 
} 
0

Compruebe mi respuesta here

Hay una extensión muy útil para Visual Studio que lo hace por usted, con solo haga clic con el botón derecho en la solución.

Cuestiones relacionadas