3

我有一个 nanoserver 容器正在运行。我使用登录到容器

> docker run -it microsoft/nanoserver powershell

在里面,我使用以下命令创建了一个简单的 hello world exe:

PS C:\> Add-Type -outputtype consoleapplication -outputassembly helloworld.exe 'public class helloworld{public static void Main(){System.Console.WriteLine("hello world");}}'

当我运行 helloworld.exe 时,stdout 上没有输出。不生成错误日志文件。我该如何调试?为什么 helloworld.exe 不在标准输出上抛出输出或错误?我该如何调试呢?

PS C:\> ls

    Directory: C:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        8/24/2017  11:08 AM                Program Files
d-----        7/16/2016   5:39 PM                Program Files (x86)
d-r---         8/8/2017   3:11 AM                Users
d-----        8/24/2017  11:08 AM                Windows
-a----        8/24/2017  11:09 AM           2048 helloworld.exe
-a----       11/20/2016   5:02 PM           1894 License.txt


PS C:\> .\helloworld.exe
PS C:\> echo %ERRORLEVEL%
%ERRORLEVEL%
4

1 回答 1

0

没有生成控制台输出的原因是因为您的可执行文件是 x86 而不是 x64。根据此链接,Nanoserver 仅支持 x64: https ://www.ca.com/en/blog-developers/docker-containers-os-base-image.html

当我使用 cl.exe 在命令行上复制一个简单的 hello world 可执行文件时,我遇到了类似的问题。在使用 dumpbin 检查 exe 是 32 位还是 64 位后,我从正确的 MS VS 开发人员提示符下重建了可执行文件,即具有本机 x64 工具集和设置的那个。这一次,我可以在 docker nanoserver 容器中看到应用程序的控制台输出。

于 2018-10-26T13:54:46.980 回答