You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell查找并比较指定程序集的版本一致性

解决方案

你必须先从匹配行中解析出版本号再进行比较,因为Select-String返回的是包含文件路径、行号和整行内容的结果,直接比较这些结果的话,哪怕版本一致,也会因为路径、行号不同被判定为不一致——我们真正需要比对的是版本号本身。

以下是针对你指定的两个文件的完整脚本:

# 定义目标文件路径和要检查的程序集名称
$targetFiles = @(
    ".\web\folder1\SearchAllFoldersInHere\packages.config",
    ".\web\folder2\SearchAllFoldersInHere\packages.config"
)
$assemblyName = "MyAssemblyName"

# 用于存储解析得到的版本号
$versions = @()

foreach ($file in $targetFiles) {
    # 检查文件是否存在
    if (-not (Test-Path $file)) {
        throw "文件不存在: $file"
    }

    # 读取文件内容,匹配包含目标程序集的行,并解析版本号
    $match = Select-String -Path $file -Pattern "id=`"$assemblyName`" version=`"([^`"]+)`""
    if (-not $match) {
        throw "在文件 $file 中未找到程序集 $assemblyName"
    }

    # 提取捕获组中的版本号
    $version = $match.Matches.Groups[1].Value
    $versions += $version
    Write-Host "文件 $file 中 $assemblyName 的版本: $version"
}

# 检查所有版本是否一致
$uniqueVersions = $versions | Get-Unique
if ($uniqueVersions.Count -ne 1) {
    throw "程序集 $assemblyName 的版本不一致: $($versions -join ', ')"
}

Write-Host "所有文件中 $assemblyName 的版本一致: $($uniqueVersions[0])"

脚本说明

  • 直接指定两个目标文件路径,避免递归搜索无关文件
  • 使用正则表达式的捕获组精准提取版本号,比单纯匹配整行更可靠
  • 先检查文件是否存在、是否找到目标程序集,提前抛出明确异常
  • 收集所有版本后用Get-Unique检查是否只有唯一版本,不一致则抛出异常

内容的提问来源于stack exchange,提问作者SimpleSimon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:35:03