在我的解决方案中,我们使用不同版本的packages.However,现在我想在整个解决方案中维护一个包的单个版本。
为了分析现有的解决方案,我编写了powershell脚本来递归地分析解决方案中的所有pacakges.config文件,现在我有了具有以下内容的PSObject
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中有不同版本的包,这些包具有相同的版本,应该从输出中删除。
PackageName Version Config
A 4 proj1\packages.config
A 4 proj2\packages.config
A 3 proj3\packages.config我该怎么做?我尝试了PackageName的组,但是我找不到一种方法来删除包B,它有相同的版本贯穿于out。
更新:
完整的powershell脚本可以找到冲突的包版本及其用法,可以找到这里
发布于 2014-12-21 16:08:57
我用以下方法解决了这个问题
$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 发布于 2014-12-21 10:54:43
也许有更容易的方法来做这件事,但我找不到。问题是,我们需要找到所有具有不同版本的包,并保存它们,同时忽略具有一致版本号的包。
我首先从您的示例中重新生成PSCustomObject数组$a,因此我们可以使用以下内容:
$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的新数组中。
$b = @()然后,我们将遍历$a数组中的每个元素。如果在$b中找不到这个元素,我们将对其进行分析。我们将此元素的包名和版本与$a中寻找不同版本号的所有元素进行比较。如果找到匹配,则在$b中保存具有相同PackageName的所有元素。
$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
}
}
}
}结果是:
Config PackageName Version
------ ----------- -------
proj1\packages.config A 4
proj1\packages.config A 4
proj1\packages.config A 3https://stackoverflow.com/questions/27588345
复制相似问题