我希望通过nuget控制台列出安装了特定软件包的项目。
前:
get-project -all | get-package | ?{ $_.Id -like 'ThePackage' } | `
<Here I have all the packages, but I can't access the project name>
最后一部分应该是Select-Object project.Name
,但get-package不会返回项目名称,只返回包信息。
答案 0 :(得分:3)
是的,这可能会更好。一种方法是利用get-package接受项目过滤器的事实:
Get-Project | foreach-object {
get-package -ProjectName $_.Name | `
Add-Member -MemberType NoteProperty -Name ProjectName -Value $_.Name -passthru
} | select id, projectname | ft -auto -GroupBy projectname
我在最后对此属性进行分组之前添加了每个包的projectname属性。
Johnny5编辑: 为了得到我想要的确切结果,我编辑了这样的命令:
Get-Project -all | foreach-object { get-package -ProjectName $_.Name | `
Add-Member -MemberType NoteProperty -Name ProjectName -Value $_.Name -passthru
} | where-object { $_.id -eq 'Id.Of.The.Package' } | select id, projectname
答案 1 :(得分:0)
对于Get-Package cmdlet的2.0.0.0版,在项目中每次使用包时都会返回一个条目 - 并且包含项目名称。
使用Visual Studio中的程序包管理器控制台中的以下命令检查您的Get-Package版本。
get-command get-package
使用以下命令查找安装了特定软件包的所有项目。
get-package newtonsoft.json
如果您有兴趣查找解决方案中哪些项目引用不同版本的任何软件包,请尝试以下命令。它应该显示一个包列表。您可以选择一个,单击确定,它将显示引用它们的项目。
get-package | group-object Id | %{$versions = ($_.Group | Group-object Version); if(($versions | measure-object).Count -gt 1){$versions;};} | %{$_.Group} | group-object Id, Version | sort-object Name | Out-GridView -OutputMode Single | %{$_.Group} | select-object -first 1 | %{ $version = $_.Version; get-package $_.Id;} | ?{$_.Version -eq $version}