You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows容器下.NET Framework多阶段构建镜像运行报hcsshim创建进程错误

问题原因
  • 语法兼容问题:你使用的Windows Server Core基础镜像默认Shell为cmd.exe,不支持Linux Bash的$()命令替换语法,也没有内置ls命令,因此第二阶段的RUN echo $(ls ./)只会原样输出字符串,无法正常列出目录文件,你无法通过该命令排查文件存在性。
  • 拷贝路径错误:MSBuild指定Configuration=Release编译时,生成的exe默认会输出到bin/Release/子目录下,你直接执行COPY --from=build /app/MyProject/bin .只会把整个Release文件夹拷贝到运行阶段的/output目录下,exe实际路径为/output/Release/MyProject.exe,和ENTRYPOINT指定的根目录下MyProject.exe路径不匹配,因此运行时会提示找不到文件。
解决方法
  1. 首先修正COPY路径,直接拷贝Release子目录下的输出文件,或者修改MSBuild命令指定输出目录:
    直接修正COPY语句即可满足绝大多数场景:COPY --from=build /app/MyProject/bin/Release .
    也可以在MSBuild命令中添加/p:OutDir=./publish参数指定输出目录,再COPY对应publish目录即可。
  2. 排查用的列目录命令替换为CMD兼容语法:把RUN echo $(ls ./)替换为RUN dir,即可正常输出当前目录下的文件列表。
  3. 可选配置:如果习惯使用PowerShell语法,可以在Dockerfile开头添加SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"],之后就可以正常使用ls(PowerShell中为Get-ChildItem的别名)等命令。

修正后完整Dockerfile示例

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2019 AS build
WORKDIR /app
COPY . .
RUN nuget restore MySolution.sln
WORKDIR /app/MyProject
RUN msbuild /p:Configuration=Release /p:Platform=AnyCPU
RUN dir

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 AS runtime
WORKDIR /output
COPY --from=build /app/MyProject/bin/Release .
RUN dir
ENTRYPOINT ["MyProject.exe"]

内容的提问来源于stack exchange,提问作者Pine Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:54:04