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

Github Actions与Codespaces中PowerShell加载.NET程序集异常排查

问题分析与解决方法

针对你在Github Actions中加载.NET 8类库后无法找到类型的问题,以下是几个常见原因及对应的解决方案:

1. PowerShell会话未正确注册加载的类型

[System.Reflection.Assembly]::LoadFrom仅在CLR层面加载程序集,但PowerShell的类型发现机制在非交互式脚本环境中可能无法自动识别这些类型。改用Add-Type命令可以明确告知PowerShell处理类型注册,更适合脚本场景:

$dllPath = Resolve-Path "./crypto/bin/Release/net8.0/linux-x64/publish/crypto.dll"
# 用Add-Type替代LoadFrom
Add-Type -Path $dllPath.Path
$crypto = New-Object -TypeName MyNamespace.ClassName -ArgumentList $text

2. 发布目录缺失依赖程序集

虽然主crypto.dll已加载,但类库可能依赖其他未被加载的dll。本地环境可能通过全局缓存或其他路径自动找到依赖,但Github Actions的干净环境中没有这些依赖,导致类型无法实例化。解决方法:

  • 检查发布命令:如果是框架依赖发布,确保Actions runner已安装.NET 8 Runtime;如果是自包含发布,确认发布时添加了--self-contained true参数,确保所有依赖都被打包。
  • 加载发布目录下所有dll:遍历发布文件夹,将所有dll都加载到会话中:
    $publishDir = "./crypto/bin/Release/net8.0/linux-x64/publish"
    Get-ChildItem -Path $publishDir -Filter "*.dll" | ForEach-Object {
        Add-Type -Path $_.FullName
    }
    $crypto = New-Object -TypeName MyNamespace.ClassName -ArgumentList $text
    

3. 类型/命名空间大小写不匹配

Linux环境是大小写敏感的,而Windows环境不是。如果脚本中MyNamespace.ClassName的大小写和dll中实际定义的不一致,在Linux的Actions runner中会找不到类型。解决方法:

  • 在本地Linux环境或Codespaces中执行以下命令,查看dll中实际的类型全名:
    $asm = [System.Reflection.Assembly]::LoadFrom("./crypto/bin/Release/net8.0/linux-x64/publish/crypto.dll")
    $asm.GetTypes() | Select-Object FullName
    
  • 将脚本中的类型名修改为和输出完全一致的大小写。

4. PowerShell Core版本兼容性问题

Github Actions默认的PowerShell版本可能和你本地/Codespaces使用的版本存在差异,导致类型加载行为不同。解决方法:

  • 在工作流中指定明确的PowerShell版本,比如:
    - name: 配置PowerShell版本
      uses: actions/setup-powershell@v2
      with:
        pwsh-version: '7.4' # 替换为你本地测试用的版本
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:02:50