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

MSB4184错误求助:构建时[System.Version]::Parse('')无法求值

解决MSB4184: "[System.Version]::Parse('')" 无法评估的问题

问题根源

该错误来自GitInfo 2.2.0包的_EnsureGit目标:当执行git --version的输出无法被正则\d+\.\d+\.\d+匹配到有效版本号时,_GitCurrentVersion会变成空字符串,导致System.Version.Parse调用失败。多次构建偶尔成功是因为Git输出偶尔符合正则匹配预期,但不稳定。

解决方案

  • 升级GitInfo包到最新版本
    旧版本的正则匹配逻辑存在兼容性问题,升级到最新版(截至当前v3.0.0+)可修复多数场景下的匹配问题。直接在NuGet包管理器中更新GitInfo即可。

  • 调整Git版本匹配正则(适配本地化/特殊输出)
    若Git输出因语言环境或版本格式特殊(如带Windows后缀的2.45.1.windows.1),可在项目的.csproj或Directory.Build.props中添加自定义正则:

    <PropertyGroup>
      <!-- 适配带后缀的Git版本输出,捕获核心版本号 -->
      <GitVersionRegex>\d+\.\d+\.\d+</GitVersionRegex>
      <!-- 或针对完整输出格式匹配 -->
      <!-- <GitVersionRegex>git version (\d+\.\d+\.\d+)</GitVersionRegex> -->
    </PropertyGroup>
    

    若自定义参数不生效,可直接修改本地\.nuget\packages\gitinfo\2.2.0\build\GitInfo.targets中的正则:
    将\d+\.\d+\.\d+替换为\d+\.\d+\.\d+(\.\w+)?,增强匹配鲁棒性。

  • 强制Git使用英文输出
    系统语言导致Git输出本地化(罕见,但可能影响正则)时,全局设置Git语言为英文:

    git config --global core.ui en_US.UTF-8
    

    或在VS开发者命令行中临时设置环境变量后构建:

    set LANG=en_US.UTF-8
    msbuild YourSolution.sln
    
  • 跳过Git版本检查(临时应急方案)
    若无需版本校验,可在项目文件中添加参数跳过检查:

    <PropertyGroup>
      <SkipGitVersionCheck>true</SkipGitVersionCheck>
    </PropertyGroup>
    

    或直接注释掉GitInfo.targets中_EnsureGit目标里的版本检查Error节点:

    <!-- 注释掉该行即可跳过版本检查 -->
    <!-- <Error Condition="$([System.Version]::Parse('$(_GitCurrentVersion)').CompareTo($([System.Version]::Parse('$(GitMinVersion)')))) &amp;lt; 0" Text="Required minimum git version is $(GitMinVersion) but found $(_GitCurrentVersion)." /> -->
    
  • 指定GitExe的完整路径
    确保MSBuild调用的是正确的Git版本,避免路径问题导致输出异常:

    <PropertyGroup>
      <GitExe>C:\Program Files\Git\bin\git.exe</GitExe>
    </PropertyGroup>
    

    替换为你本地Git的实际安装路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:05:27