首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于powershell的Nuget软件包版本差异分析

基于powershell的Nuget软件包版本差异分析
EN

Stack Overflow用户
提问于 2014-12-21 09:59:22
回答 2查看 710关注 0票数 3

在我的解决方案中,我们使用不同版本的packages.However,现在我想在整个解决方案中维护一个包的单个版本。

为了分析现有的解决方案,我编写了powershell脚本来递归地分析解决方案中的所有pacakges.config文件,现在我有了具有以下内容的PSObject

代码语言:javascript
复制
Config                PackageName   Version
proj1\packages.config   A              4
proj1\packages.config   B              1
proj2\packages.config   A              4
proj2\packages.config   B              1
proj3\packages.config   A              3
proj3\packages.config   B              1

在这个输出中有两个包A和B,其中包A有不同的版本,B自始至终都有相同的版本。

现在,我只需要显示在下面的format.The包B中有不同版本的包,这些包具有相同的版本,应该从输出中删除。

代码语言:javascript
复制
PackageName Version Config
A             4     proj1\packages.config
A             4     proj2\packages.config
A             3     proj3\packages.config

我该怎么做?我尝试了PackageName的组,但是我找不到一种方法来删除包B,它有相同的版本贯穿于out。

更新:

完整的powershell脚本可以找到冲突的包版本及其用法,可以找到这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-21 16:08:57

我用以下方法解决了这个问题

代码语言:javascript
复制
$groupedPackgeList = GetPackages | Group-Object -Property PackageName
$multipleVersionPackageList = @()
$groupedPackgeList | % {
    $originalCount =$_.Count
    $groupByVersion = $_.Group | Group-Object -Property Version
    if($groupByVersion.Count -ne $originalCount)
    {
        $packageName = $_.Name
        $groupByVersion |% {
            $_.Group |% {
            $tempObj = New-Object PSCustomObject  -Property @{Id=$packageName;Version=$_.Version;Config=$_.Config;}    
            $multipleVersionPackageList+=$tempObj  
            }
        } 
    }
}
$multipleVersionPackageList 
票数 4
EN

Stack Overflow用户

发布于 2014-12-21 10:54:43

也许有更容易的方法来做这件事,但我找不到。问题是,我们需要找到所有具有不同版本的包,并保存它们,同时忽略具有一致版本号的包。

我首先从您的示例中重新生成PSCustomObject数组$a,因此我们可以使用以下内容:

代码语言:javascript
复制
$a = @()

$a += New-Object PSCustomObject -Property @{
        Config = "proj1\packages.config";
        PackageName = "A";
        Version = 4
    }
$a += New-Object PSCustomObject -Property @{
        Config = "proj1\packages.config";
        PackageName = "B";
        Version = 1
    }
$a += New-Object PSCustomObject -Property @{
        Config = "proj1\packages.config";
        PackageName = "A";
        Version = 4
    }
$a += New-Object PSCustomObject -Property @{
        Config = "proj1\packages.config";
        PackageName = "B";
        Version = 1
    }
$a += New-Object PSCustomObject -Property @{
        Config = "proj1\packages.config";
        PackageName = "A";
        Version = 3
    }
$a += New-Object PSCustomObject -Property @{
        Config = "proj1\packages.config";
        PackageName = "B";
        Version = 1
    }

然后,我们将把结果保存在一个名为$b的新数组中。

代码语言:javascript
复制
$b = @()

然后,我们将遍历$a数组中的每个元素。如果在$b中找不到这个元素,我们将对其进行分析。我们将此元素的包名和版本与$a中寻找不同版本号的所有元素进行比较。如果找到匹配,则在$b中保存具有相同PackageName的所有元素。

代码语言:javascript
复制
$a | % { 
    $found = $false
    foreach ($e in $b)
    {
        if ($e.PackageName -eq $_.PackageName)
        {
            $found = $true
            break
        }
    }
    if (!$found)
    {
        foreach ($i in $a)
        {
            if ($i.PackageName -eq $_.PackageName -and $i.Version -ne $_.Version)
            {
                foreach ($j in $a)
                {
                    if ($j.PackageName -eq $_.PackageName)
                    {
                        $b += $j                    
                    }
                }
                break
            }
        }
    }
}

结果是:

代码语言:javascript
复制
Config                PackageName                       Version
------                -----------                       -------
proj1\packages.config A                                       4
proj1\packages.config A                                       4
proj1\packages.config A                                       3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27588345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档