我在使用Docker时遇到了一个问题,无法找到合适的解决方案。
我试图使用. NETSDK2.1构建Docker映像。
问题是,当Docker试图运行build语句时,它失败了,错误输出被忽略
CSC:错误CS5001:程序不包含适合入口点的静态“Main”方法
有趣的是,如果我在本地命令行上执行构建语句,它会很好地工作。
我已经在项目上检查了我的语言版本标签,它是7.3。
这是我的Docker文件
FROM microsoft/dotnet:2.1-sdk AS builder
WORKDIR /src
COPY ./nuget ./nuget
COPY ./NuGet.Config ./
COPY Services/AadTracking ./
# Copy all the referenced projects
COPY ./Services/AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj ./AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj
COPY ./Services/AadTracking/Office.Re.Service.AadTracking/Office.Re.Service.AadTracking.csproj ./AadTracking/Office.Re.Service.AadTracking/Office.Re.Service.AadTracking.csproj
COPY ./Services/AadTracking/Company/Office.Re.Service.AadTracking.Company/Office.Re.Service.AadTracking.Company.csproj ./AadTracking/Company/Office.Re.Service.AadTracking.Company/Office.Re.Service.AadTracking.Company.csproj
COPY ./Services/AadTracking/Office.Re.Service.AadTracking.EventStore/Office.Re.Service.AadTracking.EventStore.csproj ./AadTracking/Office.Re.Service.AadTracking.EventStore/Office.Re.Service.AadTracking.EventStore.csproj
# Restore packages
RUN dotnet restore "./AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj"
RUN dotnet build -c Debug --no-restore "./AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj"
# COPY source code
#aad tracking
COPY ./Services/AadTracking/Company/Company.Service.AadTracking ./AadTracking/Company/Company.Service.AadTracking/
COPY ./Services/AadTracking/Office.Re.Service.AadTracking ./AadTracking/Office.Re.Service.AadTracking/
COPY ./Services/AadTracking/Company/Office.Re.Service.AadTracking.Company ./AadTracking/Company/Office.Re.Service.AadTracking.Company/
COPY ./Services/AadTracking/Office.Re.Service.AadTracking.EventStore ./AadTracking/Office.Re.Service.AadTracking.EventStore/
# Publish
RUN dotnet publish "./AadTracking/Company/Company.Service.AadTracking/Company.Service.AadTracking.csproj" -c Debug -o "../../dist"
# #Build the app image
FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
ENV ASPNETCORE_ENVIRONMENT Switch
ENV REINSURANCE_INSTANCE Docker-dev
COPY --from=builder /dist .
ENTRYPOINT ["dotnet", "Company.Service.AadTracking.dll"]
谢谢你的帮助!
在docker内部编译和发布应用程序需要在docker内部复制整个应用程序。这意味着您需要在docker中复制所有类文件(.cs)以及所需的支持文件(可能是resx或配置文件)。
请参阅以下参考资料
https://github.com/aspnet/aspnet-docker/issues/401
我也有同样的问题。
我已经意识到我的Docker文件与. csproj文件处于同一级别。我已经将我的Docker文件在我的文件夹结构中向上移动了一层,它构建得很好。
我知道现在回答这个问题有点晚了。不过,VS 2019也存在同样的问题。NET核心3.1。我看了一眼微软提供的例子。原来Docker文件位于解决方案中的其他位置,Docker copy命令无法正常工作。
您必须将docker文件向上移动一个目录,以便它们与sln
文件处于同一级别。它将解决这个问题。
或者,您可以在不更改docker文件位置的情况下更改以下示例docker文件的路径,因此最好将docker文件与其他文件一起保存。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim-arm64v8 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["WhatzThat.Web.csproj", "WhatzThat.Web/"]
RUN dotnet restore "WhatzThat.Web/WhatzThat.Web.csproj" -r linux-arm64
WORKDIR "/src/WhatzThat.Web"
COPY . .
RUN dotnet build "WhatzThat.Web.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WhatzThat.Web.csproj" -c Release -o /app/publish -r linux-arm64 --self-contained false --no-restore
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WhatzThat.Web.dll"]
我试图建立我的docker形象,但我得到了这个错误。 错误CS5001:程序不包含适合入口点的静态“Main”方法[/6GAG.WebApi/6GAG.WebApi.csproj] 我在一个解决方案中有三个项目。 1 webapi 1个前端应用程序 1类图书馆 我的Dockerfile存在于我的。sln文件是 我的. csproj文件: 如何解决这个问题?
我知道在Java中,静态方法和实例方法一样是继承的,不同的是,当它们被重新声明时,父实现是隐藏的,而不是重写的。好吧,这有道理。但是,Java教程指出 接口中的静态方法从不继承。 然而,
基本上,我正在使用TestNG开发Selenium automation,我想为一个字段获取用户输入,而要获取用户输入,我需要scanner类的帮助。但如果没有主要阶层,它就不起作用。有人能帮我吗?
问题内容: 我写了下面的代码 因此,当我运行它时,它可以正常运行并打印输出“ Hello”。 但是,如果JVM规范要求该main方法应该是公开的,因为“否则它就看不到main”,那么它也不适用于该类吗?如果JVM在未声明为public时“看不到” Hello.main(),它将如何看到类A本身。 除了“因为规范这样说”以外,对此还有什么解释吗? 并且,如果JVM能够看到所有类和方法,因为它本身就是
问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么? 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。
问题内容: 我在代码中遇到了python中的未绑定方法错误 在阅读了许多有用的文章之后,我想到了如何在上面添加内容以使代码正常工作。我是python新手。有人可以解释一下为什么要定义静态方法吗?还是为什么不将所有方法都定义为静态方法? 问题答案: 静态方法的使用受到限制,因为它们无法访问类的实例的属性(就像常规方法一样),并且它们也不能访问类本身的属性(就像类方法一样) )。 因此,它们对于日常方