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

在GitHub Runner(Ubuntu环境)中构建.NET项目时遭遇‘N/A’无效版本字符串错误的排查咨询

排查GitHub Runner上.NET构建不稳定的NuGet版本错误

从你的描述来看,问题出在NuGet还原阶段的版本解析,而且只在GitHub Runner环境中出现(命令行手动执行正常),还带有“成功两次后持续失败”的奇怪现象,我们可以从以下几个方向逐步排查:

1. 先定位问题根源:找出哪个版本字符串变成了"N/A"

错误提示'N/A' is not a valid version string,但没说清楚是哪个包或项目的版本出问题。你可以修改Build步骤的命令,添加详细日志参数,获取更具体的信息:

dotnet publish --configuration Release ./Gif -v detailed

详细日志会打印出还原过程中每个包的版本解析情况,能直接找到导致N/A的来源(比如某个PackageReference的版本变量未定义,或者项目自身的Version配置有问题)。

2. 清理缓存:解决“成功两次后失败”的不稳定问题

GitHub Runner的缓存(包括NuGet缓存、构建输出缓存)很可能是导致不稳定的原因——前两次构建可能用了干净的缓存,之后缓存了错误的版本信息。你可以在构建流程中强制清理这些缓存:

  • 在Setup .NET步骤前添加NuGet缓存清理:
    dotnet nuget locals all --clear
    
  • 在Build步骤前添加项目清理:
    dotnet clean --configuration Release ./Gif
    

同时,把你的Cleanup步骤改成更精准的工作目录清理(避免误删Runner系统文件):

rm -rf $GITHUB_WORKSPACE/*

3. 检查环境变量:排除变量冲突

虽然你设置了VERSION: "123",但Runner环境中可能存在其他干扰变量(比如系统级的VERSION变量,或者NuGet相关的环境变量)。你可以在Build步骤前添加一个打印环境变量的步骤,对比命令行和Runner环境的差异:

env

重点关注和版本、NuGet相关的变量(比如VERSION、NUGET_VERSION、DOTNET_VERSION等),看Runner中是否有未预期的变量值覆盖了你的配置。

4. 检查项目文件的版本配置

打开你的GifOnboarding.csproj或解决方案文件,查看是否有依赖VERSION变量的版本配置,比如:

<Version>$(VERSION)</Version>

如果有这种配置,先尝试换成固定版本(比如<Version>123</Version>)测试,看是否还会出现N/A错误。如果固定版本正常,说明是变量传递的问题——可能Runner中VERSION变量没有正确传递到MSBuild进程中。

5. 排查Root用户权限问题

你的Runner以root身份运行,可能存在缓存目录权限异常的情况:比如之前的构建残留了普通用户权限的缓存文件,导致root用户无法正确读写。你可以手动检查NuGet缓存目录的权限:

ls -ld /root/.nuget/packages

确保该目录及其子文件的所有者是root,如果不是,执行以下命令修复:

chown -R root:root /root/.nuget/packages

修改后的示例YAML配置

结合以上排查步骤,你可以更新你的构建YAML,添加必要的调试和清理步骤:

name: .NET-main
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  build:
    runs-on: self-hosted
    steps:
    - name: Cleanup workspace
      run: rm -rf $GITHUB_WORKSPACE/*
    - uses: actions/checkout@v2
    - name: Print environment variables
      run: env
    - name: Clean NuGet cache
      run: dotnet nuget locals all --clear
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.x
    - name: Clean project
      run: dotnet clean --configuration Release ./Gif
    - name: Build with detailed logs
      env:
        VERSION: "123"
      run: dotnet publish --configuration Release ./Gif -v detailed
    - name: Deploy
      run: |
        cp -a ./Gif/GifOnboarding/bin/Release/netcoreapp3.1/* /var/www/dotnet/

通过以上步骤,你应该能定位到具体的问题点,解决构建不稳定的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:58:12