2012-04-05 12 views
11

Ich bin ein bisschen ein NuGet-Neuling und komme aus der Maven-Welt.Finden von Drittanbieter-Lizenzen mit Nuget

Kürzlich wurde ich damit beauftragt, die Lizenzinformationen von Drittanbietern für unsere Projekte zu aktualisieren. Bei der Arbeit mit den Maven-Projekten konnte ich das license:download-licenses Plugin verwenden, um die Lizenzinformationen zu erhalten.

Was ich frage mich ist, wenn es eine Möglichkeit gibt, diese Informationen mit Nuget zu bekommen? Vorzugsweise unter Verwendung der Befehlszeilenschnittstelle, so dass ich es auf einer CI-Build-Ebene automatisieren kann. Um es aus dem großen manuellen Pre-Build-Schritt zu entfernen.

EDIT:

Da ich nicht in der Lage war, alle Dienstprogramme zu finden, dies zu tun habe ich zusammen die LegSec command line utility.

+0

Vielen Dank für den Link zu Ihrem Projekt! Ich habe LegSec heute verwendet ... die Verwendung der Befehlszeile war etwas schwierig zu ermitteln (einige Versuche + Fehler), aber die Funktionalität war großartig. – crimbo

+0

Anscheinend wissen sie, wie man es seit 2013 macht, es wurde nur nie programmatisch herausgestellt: https://blog.nuget.org/20131011/friendly-license-names.html. Ich habe ein Problem geöffnet, das Sie möglicherweise aktualisieren möchten: https://github.com/NuGet/Home/issues/5793. –

Antwort

11

Soweit mir bekannt ist, ist derzeit nichts verfügbar, um die Lizenzinformationen direkt von der Befehlszeile als Teil eines CI-Builds abzurufen. Sie müssten eine Anwendung erstellen, um die .nupkg-Zip-Datei zu öffnen, die Lizenz-URL aus der .nuspec-Datei extrahieren und die Lizenz von dieser URL herunterladen.

Alternativ können Sie das Paketmanager-Konsolenfenster in Visual Studio verwenden und mit ein wenig PowerShell die Lizenzdateien herunterladen.

Ein einfaches Beispiel, das die Lizenzdatei für alle Pakete in einem Projekt erhält, wird unten gezeigt. Dies müsste erweitert werden, um alle Projekte in der Lösung zu erhalten, die Sie mit dem Cmdlet Get-Project ausführen können. Dies würde immer noch erfordern, dass jemand das Skript ausführt, um die Lizenzen herunterzuladen.

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

Nur eine Anmerkung - In VS2015 gibt 'LicenseUrl' immer eine leere Zeichenfolge zurück. In der NuGet-Dokumentation wird "LicenseUrl" auf v3.x auf veraltet angegeben, buts erwähnt keine Alternativen. –

+2

Die LicenseUrl wurde in NuGet 3.4 oder höher hinzugefügt. –

0

ich es geschafft, die Lizenzinformationen mit dem folgenden Befehl zu erhalten:

@(@(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

meine Antwort prüfen here

Es ist eine sehr nützliche Erweiterung für Visual Studio, die es für Sie tut, mit Klicken Sie einfach mit der rechten Maustaste auf die Lösung.