Powershell:Github Actions 与 Gitub Codespace 的不同行为(找不到类型:验证包含此类型的程序集是否已加载)

问题描述 投票:0回答:1

我需要在 Github Actions 工作流程中构建和使用这个 NET8

crypto.dll
类库。但看在上帝的份上,我无法让它与 Powershell(核心)一起工作。

运行器在 Ubuntu VM 上运行,使用此步骤发布类库:

name: workflow

on:
  workflow_dispatch:
  push:
    branches: [ main ]
    paths: 
      - folder/prefix__**.json

permissions:
  id-token: write

jobs:

  build:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      issues: write
      id-token: write

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Prepare
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '8.x.x'

      - name: Build
        run: dotnet publish ./crypto/crypto.csproj --configuration Release --nologo -r linux-x64

      - name: Authenticate
        uses: azure/login@v1
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      - name: Transfer
        run: ./upload.ps1
        shell: pwsh

这就完成了,并发布了

./crypto/bin/Release/net8.0/linux-x64/publish/crypto.dll
,我现在需要在脚本中使用它
upload.ps1
。现在,当我在本地(Win)或 Github 代码空间中的(基于 Linux 的)开发容器以交互方式运行以下命令时,它工作正常。我可以实例化类库中的类型。

[System.Reflection.Assembly]::LoadFrom((Resolve-Path "./crypto/bin/Release/net8.0/linux-x64/publish/crypto.dll"))
$crypto = New-Object -TypeName MyNamespace.ClassName -ArgumentList $text

本地(获胜)

PS C:\Users\me\src\sql> [System.Reflection.Assembly]::LoadFrom((Resolve-Path "./crypto/bin/Release/net8.0/publish/crypto.dll").Path)

GAC    Version        Location
---    -------        --------
False  v4.0.30319     C:\Users\me\src\sql\crypto\bin\Release\net8.0\publish\crypto.dll

PS C:\Users\me\src\sql> $crypto = New-Object -TypeName MyNamespace.ClassName -ArgumentList $text
PS C:\Users\me\src\sql>

远程(Github 代码空间)

root@codespaces-164733:/workspaces/sql# pwsh
PowerShell 7.4.0
PS /workspaces/sql> [System.Reflection.Assembly]::LoadFrom((Resolve-Path "./crypto/bin/Release/net8.0/linux-x64/publish/crypto.dll"))

GAC    Version        Location
---    -------        --------
False  v4.0.30319     /workspaces/sql/crypto/bin/Release/net8.0/linux-x64/publish/crypto.dll

PS /workspaces/sql> $crypto = New-Object -TypeName MyNamespace.ClassName -ArgumentList $text                                             
PS /workspaces/sql> 

但是,当将此作为 Github Action 的一部分执行时,实例化会失败。这是操作运行日志的摘录。它从程序集中加载类型,但此后仍然无法使用它们。

#...

GAC    Version        Location
---    -------        --------
False  v4.0.30319     /home/runner/work/sql/sql/crypto/bin/Release/net8.0/linux-x64/publish/crypto.dll
New-Object: /home/runner/work/sql/sql/upload.ps1:29
Line |
  29 |  …   $crypto = New-Object -TypeName MyNamespace.ClassName -Argume …
     |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find type [MyNamespace.ClassName]: verify that the
     | assembly containing this type is loaded.

Error: Process completed with exit code 1.

#...

我完全不知道为什么会这样,我什至尝试让工作流程在 Windows 运行程序中运行,但即使在那里它也是一样的。

您知道为什么会发生这种情况吗?非常感谢任何见解或反馈!

powershell .net-core github-actions
1个回答
0
投票

需要检查的事项:

  • 您能否确认环境是紧密复制的?这包括操作系统、.NET 版本以及您的库可能具有的任何依赖项。

  • 基于错误

    MyNamespace.ClassName
    未加载。检查 GitHub Action 环境中 DLL 的路径。与本地环境或 GitHub Codespace 相比,GitHub Action 环境中的路径可能会有所不同。

  • 确认 GitHub Action 具有访问和执行 DLL 文件所需的权限。

  • 添加更多日志记录以查明其他故障发生的位置/获取更详细的日志记录。

© www.soinside.com 2019 - 2024. All rights reserved.