我是NuGet的新手,来自Maven世界。用Nuget找到第三方许可证
最近我的任务是更新我们项目的第三方许可证信息。通过使用Maven项目,我可以使用license:download-licenses
插件获取许可证信息。
我想知道的是,如果有一种方法可以使用Nuget获取这些信息吗?最好使用命令行界面,以便我可以在CI构建级别将其自动化。将其从大型手动预构建步骤中删除。
编辑:
因为我无法找到任何工具来做到这一点我放在一起LegSec command line utility。
我是NuGet的新手,来自Maven世界。用Nuget找到第三方许可证
最近我的任务是更新我们项目的第三方许可证信息。通过使用Maven项目,我可以使用license:download-licenses
插件获取许可证信息。
我想知道的是,如果有一种方法可以使用Nuget获取这些信息吗?最好使用命令行界面,以便我可以在CI构建级别将其自动化。将其从大型手动预构建步骤中删除。
编辑:
因为我无法找到任何工具来做到这一点我放在一起LegSec command line utility。
据我所知,目前没有任何东西可以直接从命令行获取许可证信息作为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")
}
只是一个说明 - 在VS2015'LicenseUrl'总是返回一个空字符串。 NuGet文档说'LicenseUrl'将从病房的v3.x弃用,但没有提及任何替代品 – 2015-11-20 05:33:17
LicenseUrl已被添加到NuGet 3.4或更高版本。 – 2016-05-06 08:57:39
我设法使用下面的命令许可信息:
@(@(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"
}
}
检查我的答案here
有Visual Studio的一个非常有用的扩展,它会为你,有只需右键点击解决方案。
感谢您发布链接到您的项目!我今天使用了LegSec ...命令行的使用有点难以理解(一些试验+错误),但功能非常好。 – crimbo 2014-04-18 22:15:15
显然他们知道自2013年以来如何做,它从未以程序化方式暴露过:https://blog.nuget.org/20131011/friendly-license-names.html。我打开了一个您可能想要注册的问题:https://github.com/NuGet/Home/issues/5793。 – 2017-08-23 09:15:13