gpt4 book ai didi

c# - 使用 Docker 构建应用程序时打开控制台窗口

转载 作者:行者123 更新时间:2023-12-03 19:01:41 26 4
gpt4 key购买 nike

我面临的问题是 .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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com