Docker在VS中运行但在发布到AWS时出错? 错误CS5001:程序不包含适用于入口点的静态“主”方法

我为Visual Studio 2017安装了AWS工具包(V15.7.3),并使用API​​模板和Linux docker支持创建了一个新的空Asp.Net核心2.1项目。 我可以在Visual Studio中运行它。

加载项目后Visual Studio Docker输出

 ==========准备容器==========
让Docker容器准备就绪......
 docker-compose -f“C:\ work \ Strats \ docker-compose.yml”-f“C:\ work \ Strats \ docker-compose.override.yml”-f“C:\ work \ Strats \ obj \ Docker \ docker-compose.vs.debug.g.yml“-p dockercompose607729401690719332 --no-ansi config
未设置DOCKER_REGISTRY变量。 默认为空字符串。
服务:
   processfiles:
    建立:
      上下文:C:\ work \ Strats
       dockerfile:ProcessFiles / Dockerfile
      目标:基地
     entrypoint:tail -f / dev / null
    环境:
       ASPNETCORE_ENVIRONMENT:发展
       ASPNETCORE_HTTPS_PORT:'44347'
       ASPNETCORE_URLS:https:// +:443; http:// +:80
       DOTNET_USE_POLLING_FILE_WATCHER:'1'
       NUGET_FALLBACK_PACKAGES:/root/.nuget/fallbackpackages
     image:processfiles:dev
    标签:
       com.microsoft.visualstudio.debuggee.arguments:' -  additionalProbingPath /root/.nuget/packages
         --additionalProbingPath /root/.nuget/fallbackpackages bin / Debug / netcoreapp2.1 / ProcessFiles.dll'
       com.microsoft.visualstudio.debuggee.killprogram:/ bin / bash -c“if PID = $$(pidof
         -x dotnet); 然后杀死$$ PID; 科幻”
       com.microsoft.visualstudio.debuggee.program:dotnet
       com.microsoft.visualstudio.debuggee.workingdirectory:/ app
    端口:
     - 出版:49971
      目标:80
     - 出版:44347
      目标:443
    卷:
     -  C:\ work \ Strats \ ProcessFiles:/ app:rw
     -  C:\ Users \ ... \ vsdbg \ vs2017u5:/ remote_debugger:ro
     -  C:\ Users \ ... \ AppData \ Roaming \ ASP.NET \ Https:/root/.aspnet/https:ro
     -  C:\ Users \ ... \ AppData \ Roaming \ Microsoft \ UserSecrets:/root/.microsoft/usersecrets:ro
     -  C:\ Program Files \ dotnet \ sdk \ NuGetFallbackFolder:/root/.nuget/fallbackpackages:ro
     -  C:\ Users \ ... \。nuget \ packages:/root/.nuget/packages:ro
版本:'3.4'
 docker ps --filter“status = running”--filter“name = dockercompose607729401690719332_processfiles_”--format {{。ID}} -n 1
 docker-compose -f“C:\ work \ Strats \ docker-compose.yml”-f“C:\ work \ Strats \ docker-compose.override.yml”-f“C:\ work \ Strats \ obj \ Docker \ docker-compose.vs.debug.g.yml“-p dockercompose607729401690719332 --no-ansi build 
未设置DOCKER_REGISTRY变量。 默认为空字符串。
构建流程文件
步骤1/4:FROM microsoft / dotnet:2.1-aspnetcore-runtime AS base
  ---> 04aae08f15c5
第2/4步:WORKDIR / app
  --->使用缓存
  ---> 135955e04284
步骤3/4:EXPOSE 49971
  --->使用缓存
  ---> 2e1bb95e0d70
步骤4/4:EXPOSE 44347
  --->使用缓存
  ---> 89dc3708552d
成功建成89dc3708552d
成功标记了流程文件:dev
 docker-compose -f“C:\ work \ Strats \ docker-compose.yml”-f“C:\ work \ Strats \ docker-compose.override.yml”-f“C:\ work \ Strats \ obj \ Docker \ docker-compose.vs.debug.g.yml“-p dockercompose607729401690719332 --no-ansi up -d --no-build --force-recreate --remove-orphans
未设置DOCKER_REGISTRY变量。 默认为空字符串。
使用默认驱动程序创建网络“dockercompose607729401690719332_default”
创建dockercompose607729401690719332_processfiles_1 ... 
创建dockercompose607729401690719332_processfiles_1 ...完成
完成!  Docker容器已准备就绪。

在Visual Studio中运行时Docker输出

 ==========调试==========
 docker ps --filter“status = running”--filter“name = dockercompose607729401690719332_processfiles_”--format {{。ID}} -n 1
 1cad14cb758c
启动https:// localhost:44347 / api / values ...

Visual studio构建输出

 1> ------ Build build:项目:docker-compose,配置:调试任何CPU ------
 1> docker ps --filter“status = running”--filter“name = dockercompose607729401690719332_processfiles_”--format {{。ID}} -n 1
 1> 1cad14cb758c
 1> docker exec -i 1cad14cb758c / bin / bash -c“如果PID = $(pidof -x dotnet);则kill $ PID; fi”
 1> C:\ work \ Strats \ ProcessFiles \ ProcessFiles.csproj:警告NU1701:使用'.NETFramework,Version = v4.6.1'而不是项目目标框架'恢复包'System.Linq.Queryable 4.0.1'。 NETCoreApp,版本= V2.1' 。 此软件包可能与您的项目不完全兼容。
 1> ProcessFiles  - > C:\ work \ Strats \ ProcessFiles \ bin \ Debug \ netcoreapp2.1 \ ProcessFiles.dll
 1>完成构建项目“ProcessFiles.csproj”。
 1> docker-compose -f“C:\ work \ Strats \ docker-compose.yml”-f“C:\ work \ Strats \ docker-compose.override.yml”-f“C:\ work \ Strats \ _ obj \ Docker \ docker-compose.vs.debug.g.yml“-p dockercompose607729401690719332 --no-ansi up -d
 1>未设置DOCKER_REGISTRY变量。 默认为空字符串。
 1> dockercompose607729401690719332_processfiles_1是最新的
 ==========构建:1成功或最新,0失败,0跳过==========

因此它运行并在浏览器中显示默认值api示例。

现在我右键单击该项目,然后在修复Dockerfile之后单击“将容器发布到AWS …”( Docker for Windows构建添加了前缀`/ var / lib / docker / tmp /`for COPY? )。 但是,AWS消息框中的以下消息失败了吗?

检查Dockerfile以了解如何构建项目和docker镜像
 ...跳过构建项目,因为它是作为Dockerfile的一部分完成的
执行docker build
 ...调用'docker build',工作文件夹'C:\ work \ Strats \ ProcessFiles,docker file C:\ work \ Strats \ ProcessFiles \ Dockerfile,image name processfiles:latest'
 ... docker build:将构建上下文发送到Docker守护程序1.176MB
 ... docker build:步骤1/17:FROM microsoft / dotnet:2.1-aspnetcore-runtime AS base
 ...docker构建:---> 04aae08f15c5
 ... docker build:步骤2/17:WORKDIR / app
 ... docker build:--->使用缓存
 ...docker构建:---> 135955e04284
 ...docker构建:步骤3/17:EXPOSE 49971
 ... docker build:--->使用缓存
 ...docker构建:---> 2e1bb95e0d70
 ...docker构建:步骤4/17:EXPOSE 44347
 ... docker build:--->使用缓存
 ...docker构建:---> 89dc3708552d
 ... docker build:步骤5/17:FROM microsoft / dotnet:2.1-sdk AS build
 ...docker构建:---> 7c3e298d40ac
 ... docker build:步骤6/17:WORKDIR / src
 ... docker build:--->使用缓存
 ...docker构建:---> 6b6446592420
 ... docker build:步骤7/17:COPY ProcessFiles.csproj ProcessFiles /
 ...docker构建:---> 024a84501cff
 ... docker build:步骤8/17:运行dotnet还原ProcessFiles / ProcessFiles.csproj
 ... docker build:--->在1ef41c99d3bc中运行
 ... docker build:恢复/src/ProcessFiles/ProcessFiles.csproj的包...
 ... docker build:生成MSBuild文件/src/ProcessFiles/obj/ProcessFiles.csproj.nuget.g.props。
 ... docker build:生成MSBuild文件/src/ProcessFiles/obj/ProcessFiles.csproj.nuget.g.targets。
 ... docker build:对于/src/ProcessFiles/ProcessFiles.csproj,恢复在770.82 ms内完成。
 ... docker build:删除中间容器1ef41c99d3bc
 ...docker构建:---> 276efaf02bd4
 ...docker构建:步骤9/17:复制。  。
 ...docker建造:---> 128814476275
 ... docker build:步骤10/17:WORKDIR / src / ProcessFiles
 ... docker build:删除中间容器004eb873b480
 ...docker构建:---> 8c1741062d87
 ... docker build:步骤11/17:运行dotnet构建ProcessFiles.csproj -c Release -o / app
 ... docker build:--->在fd25517b7941中运行
 ... docker build:用于.NET Core的Microsoft(R)Build Engine版本15.7.179.6572
 ... docker build:版权所有(C)Microsoft Corporation。 版权所有。
 ... docker build:对于/src/ProcessFiles/ProcessFiles.csproj,恢复在55.9毫秒内完成。
 ... docker build:CSC:错误CS5001:程序不包含适用于入口点的静态“Main”方法[/src/ProcessFiles/ProcessFiles.csproj]
 ...docker构建:构建失败。
 ... docker build:CSC:错误CS5001:程序不包含适用于入口点的静态“Main”方法[/src/ProcessFiles/ProcessFiles.csproj]
 ...docker建造:0警告
 ... docker build:1错误
 ...docker构建:时间流逝00:00:02.56
 ... docker build:命令'/ bin / sh -c dotnet build ProcessFiles.csproj -c Release -o / app'返回非零代码:1
执行“docker build”时出错
尝试清除为失败的部署创建的任何ELB资源
将容器发布到AWS的未知错误

这是VS创建的主要方法。

 namespace ProcessFiles { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup(); } } 

Dockerfile

 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 49971 EXPOSE 44347 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY ProcessFiles.csproj ProcessFiles/ RUN dotnet restore ProcessFiles/ProcessFiles.csproj COPY . . WORKDIR /src/ProcessFiles RUN dotnet build ProcessFiles.csproj -c Release -o /app FROM build AS publish RUN dotnet publish ProcessFiles.csproj -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "ProcessFiles.dll"] 

构建阶段的路径是不可靠的。 您的项目文件正被复制到子文件夹/src/ProcessFiles ,但源文件正被复制到/src 。 在复制之前设置WORKDIR应该允许它们落在正确的位置。

 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY ProcessFiles.csproj ProcessFiles/ RUN dotnet restore ProcessFiles/ProcessFiles.csproj WORKDIR /src/ProcessFiles COPY . . RUN dotnet build ProcessFiles.csproj -c Release -o /app