2012-04-05 82 views
11

我是NuGet的新手,來自Maven世界。用Nuget找到第三方許可證

最近我的任務是更新我們項目的第三方許可證信息。通過使用Maven項目,我可以使用license:download-licenses插件獲取許可證信息。

我想知道的是,如果有一種方法可以使用Nuget獲取這些信息嗎?最好使用命令行界面,以便我可以在CI構建級別將其自動化。將其從大型手動預構建步驟中刪除。

編輯:

因爲我無法找到任何工具來做到這一點我放在一起LegSec command line utility

+0

感謝您發佈鏈接到您的項目!我今天使用了LegSec ...命令行的使用有點難以理解(一些試驗+錯誤),但功能非常好。 – crimbo 2014-04-18 22:15:15

+0

顯然他們知道自2013年以來如何做,它從未以程序化方式暴露過:https://blog.nuget.org/20131011/friendly-license-names.html。我打開了一個您可能想要註冊的問題:https://github.com/NuGet/Home/issues/5793。 – 2017-08-23 09:15:13

回答

11

據我所知,目前沒有任何東西可以直接從命令行獲取許可證信息作爲CI構建的一部分。您需要創建一個應用程序來打開.nupkg zip文件,從.nuspec文件中提取許可證URL並從此URL下載許可證。

或者,您可以使用Visual Studio中的軟件包管理器控制檯窗口和一些PowerShell下載許可證文件。

下面顯示了一個獲取項目中所有軟件包的許可證文件的簡單示例。這需要進行擴展才能獲得解決方案中的所有項目,您應該可以使用Get-Project cmdlet執行此項目。這仍然需要有人運行腳本來下載許可證。

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

只是一個說明 - 在VS2015'LicenseUrl'總是返回一個空字符串。 NuGet文檔說'LicenseUrl'將從病房的v3.x棄用,但沒有提及任何替代品 – 2015-11-20 05:33:17

+2

LicenseUrl已被添加到NuGet 3.4或更高版本。 – 2016-05-06 08:57:39

0

我設法使用下面的命令許可信息:

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

檢查我的答案here

有Visual Studio的一個非常有用的擴展,它會爲你,有隻需右鍵點擊解決方案。