我遇到了一个问题,一个 .Net Core WPF 应用程序在启动时会自动打开一个控制台窗口。这只发生在 Docker 容器内部构建时。当我直接在个人电脑上构建时,只有实际的应用程序窗口会打开。
我最好的猜测是,这是基于 .Net Core 镜像的操作系统的问题。.Net Core SDK Docker Hub Repo 知道以下标签: 3.1-nanoserver-1809、3.1-nanoserver-1903、3.1-nanoserver-1909、3.1-nanoserver-2004 和 3.1-nanoserver-2009。我已经能够确认前三个标签的问题,但在我的计算机上无法运行 2004 和 2009 标签,因此我需要其他人尝试并证实我的理论(这意味着它不应该在至少其中一个镜像上发生),或提出更好的解释为什么会出现这种情况。
这可以通过 Visual Studio 为您创建的默认 .Net Core WPF 应用程序进行复现。以下是一个 Dockerfile 来测试它:
以下是翻译的结果:
我最好的猜测是,这是基于 .Net Core 镜像的操作系统的问题。.Net Core SDK Docker Hub Repo 知道以下标签: 3.1-nanoserver-1809、3.1-nanoserver-1903、3.1-nanoserver-1909、3.1-nanoserver-2004 和 3.1-nanoserver-2009。我已经能够确认前三个标签的问题,但在我的计算机上无法运行 2004 和 2009 标签,因此我需要其他人尝试并证实我的理论(这意味着它不应该在至少其中一个镜像上发生),或提出更好的解释为什么会出现这种情况。
这可以通过 Visual Studio 为您创建的默认 .Net Core WPF 应用程序进行复现。以下是一个 Dockerfile 来测试它:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY . ./
RUN dotnet build -c Debug -o out
FROM stefanscherer/chocolatey
WORKDIR /app
RUN choco install -y 7zip
# Depending on your project setup it might be src/[project name]/out
COPY --from=build /src/out ./test
RUN 7z a -y test.zip ./test/*
以下是翻译的结果:
您可以使用以下命令构建镜像并提取已编译好的程序:
docker build -t testimage .
docker run -d --name testcontainer testimage
docker stop testcontainer
docker cp testcontainer:app/test.zip .