我想创建一个 GitHub 操作,在每次推送时编译我的 Business Central Extension。我想创建一个自托管运行器,因此我使用 Visual Studio Code 和 AL 扩展创建了一个 Windows 容器。但是当我在容器内运行 alc.exe 时,它只是默默地失败了:
PS C:\> alc
PS C:\> $?
False
预期的输出将是:
Microsoft (R) AL Compiler version 7.4.7.37768
Copyright (C) Microsoft Corporation. All rights reserved
error AL1049: A project without a manifest must have the /out option specified.
alc.exe
位于C:\Users\ContainerAdministrator\.vscode\extensions\ms-dynamics-smb.al-7.4.496506\bin
,我把它放在 PATH 中。此目录中的其他程序按预期返回输出,例如webdeploy.exe
.
这是重现问题的 Dockerfile:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
# Set your PowerShell execution policy
RUN powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force
# Install Chocolatey on the docker container
RUN Set-ExecutionPolicy Bypass -Scope Process -Force; \
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; \
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
# Install Chocolatey packages
RUN choco install dependencies vscode -y
RUN code --install-extension ms-dynamics-smb.al
# Update path to include AL compiler
RUN $newPath = ('{0}/.vscode/extensions/ms-dynamics-smb.al-7.4.496506/bin;{1}' -f $env:USERPROFILE,$env:PATH); \
Write-Host ('Updating PATH: {0}' -f $newPath); \
[Environment]::SetEnvironmentVariable('PATH', $newPath, [EnvironmentVariableTarget]::Machine);
# Run it!
CMD echo "Hello World"
我尝试过的事情
我的第一个猜测是程序缺少一些 DLL,所以我使用Dependencies转储了 exe 使用的所有 DLL 。您可以在此处查看输出。有一些 DLL 被标记为 NOT_FOUND,但这些 DLL 与 webdeploy.exe 使用的 DLL 相同,所以我怀疑这与缺少 DLL 有关。
我还尝试了procmon的 CLI 版本,如下所示:
procmon /backingfile dockerlogs.pml /nofilter /quiet /accepteula
alc
procmon /terminate
但我最终得到了一个只有 1kb 的日志文件,它不包含任何事件。
任何想法这里有什么问题或我如何调试它?