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

标签 c# wpf docker .net-core

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

相关文章:

c# - 在 C# 中执行 WPF 元素验证?

ruby-on-rails - 127.0.0.1:11211已关闭party_manager | DalliError:没有可用的服务器

c# - 如何异步初始化静态类

c# - 具有两个来源的 WPF 图像

c# - 第一个 TreeViewItem 未设置样式(MahApps Metro TreeView)

docker网络中的docker tcp重传

docker - 运行多个 podman 容器,例如 docker-compose

c# - 如何使用 StorageItem 保存 vsto 加载项特定数据

c# - 扩展 System.Object 时如何避免装箱/拆箱?

c# - 如何在 C# 中使用 mschart 以百分比格式显示数据点