我面临的问题是 .Net Core WPF 应用程序在启动时会自动打开一个控制台窗口。这仅在在 Docker 容器内构建时发生。当我直接在我的 PC 上构建它时,只会打开实际的应用程序窗口。
我最好的猜测是,这是 .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 .
最佳答案
我能够在 3.1-nanoserver-2009
上重现这个问题和 3.1-nanoserver-2004
为你。
我认为问题与构建期间打印的警告有关:
warning NETSDK1074: The application host executable will not be customized because adding resources requires that the build be performed on Windows (excluding Nano Server).
如果是这样,那么似乎是
nanoserver
的限制。基本图像,不幸的是,这个问题似乎仍未解决,因为在 mcr.microsoft.com/dotnet/nightly/sdk:5.0
中构建时它仍然存在.Here's一个相关的拉取请求,可能会对该主题有所了解。
话虽如此,我认为目前唯一的选择是使用
nanoserver
以外的 Windows 图像。 (可以找到替代方案 here )。我没有找到任何预装 .NET Core SDK 的图像(虽然我没有花太多精力去寻找它),但设置它应该相当简单。在下面的例子中,我使用了 servercore
图像,因为它比 windows
轻得多图片。FROM mcr.microsoft.com/windows/servercore:20H2 AS sdk
WORKDIR /dotnet
# Download the official .NET Core install script
RUN powershell -c "Invoke-WebRequest -Uri https://dot.net/v1/dotnet-install.ps1 -OutFile dotnet-install.ps1"
# Run the install script
RUN powershell -c "& ./dotnet-install.ps1 -InstallDir ."
# Add the installed executable to PATH
RUN setx PATH "%PATH%;/dotnet"
FROM sdk AS build
# Do your stuff here
Here您将找到安装脚本的文档。我还确认生成的应用程序在运行时没有生成控制台窗口。
关于c# - 使用 Docker 构建应用程序时打开控制台窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64588598/