我需要在 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 运行程序中运行,但即使在那里它也是一样的。
您知道为什么会发生这种情况吗?非常感谢任何见解或反馈!
需要检查的事项:
您能否确认环境是紧密复制的?这包括操作系统、.NET 版本以及您的库可能具有的任何依赖项。
基于错误
MyNamespace.ClassName
未加载。检查 GitHub Action 环境中 DLL 的路径。与本地环境或 GitHub Codespace 相比,GitHub Action 环境中的路径可能会有所不同。
确认 GitHub Action 具有访问和执行 DLL 文件所需的权限。
添加更多日志记录以查明其他故障发生的位置/获取更详细的日志记录。