2012-04-05 87 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的一个非常有用的扩展,它会为你,有只需右键点击解决方案。