C# 复制内部发布的树后,docker映像中缺少DLL

C# 复制内部发布的树后,docker映像中缺少DLL,c#,.net,docker,asp.net-core,.net-core,C#,.net,Docker,Asp.net Core,.net Core,我目前正在尝试使用JIB打包和部署一个不是我写的dotnet项目(我对dotnet不太熟悉) 我在我的windows计算机上安装了dotnet SDK(和visual studio 19),在我的解决方案上调用“dotnet publish-c Release”后(该解决方案包含一个项目X和一个测试项目X_测试),我最终得到一个bin/Release/netcoreapp2.1\publish文件夹 在这里,我可以运行“dotnetx.dll”并启动应用程序 现在,我想将已发布的文件夹部署到do

我目前正在尝试使用JIB打包和部署一个不是我写的dotnet项目(我对dotnet不太熟悉)

我在我的windows计算机上安装了dotnet SDK(和visual studio 19),在我的解决方案上调用“dotnet publish-c Release”后(该解决方案包含一个项目X和一个测试项目X_测试),我最终得到一个bin/Release/netcoreapp2.1\publish文件夹

在这里,我可以运行“dotnetx.dll”并启动应用程序

现在,我想将已发布的文件夹部署到docker映像。我的第一次尝试是使用
mcr.microsoft.com/dotnet/core/runtime:2.1
,这导致

It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.App', version '2.1.1' was not found.
  - Check application dependencies and target a framework version installed at:
      /usr/share/dotnet/
  - Installing .NET Core prerequisites might help resolve this problem:
      https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
  - The .NET Core framework and SDK can be installed from:
      https://aka.ms/dotnet-download
然后我尝试使用
mcr.microsoft.com/dotnet/core/aspnet:2.1
,它给出了

C:\Users\m86194\git\microsvc-operational-information>docker run -it  operational-information-ms:0.0.1-SNAPSHOT bash
Error:
  An assembly specified in the application dependencies manifest (Operational_Information.deps.json) was not found:
    package: 'Elasticsearch.Net', version: '6.0.0'
    path: 'lib/netstandard1.3/Elasticsearch.Net.dll'
bin\Release\netcoreapp21\publish
文件夹的根目录中有一个“Elasticsearch.Net.dll”文件,但其他地方没有

我相信我在构建过程中遗漏了一些东西


建议?

在执行发布命令之前,请尝试执行
dotnet还原。或者,您可以使用多阶段docker构建。请参阅(注意aspnet核心版本)

在执行publish命令之前,尝试执行
dotnet还原。或者,您可以使用多阶段docker构建。请参阅(注意aspnet核心版本)

结果表明,我在指定docker文件部署时犯了一个错误


我没有使用
bin\Release\netcoreapp21\publish
而是使用了
bin\Release\netcoreapp21\
,它在
publish
文件夹中也有一个X.dll,但给出了错误。改为使用
publish
文件夹解决了问题。

结果表明,我在指定docker文件部署时犯了一个错误


我没有使用
bin\Release\netcoreapp21\publish
而是使用了
bin\Release\netcoreapp21\
,它在
publish
文件夹中也有一个X.dll,但给出了错误。改为使用
publish
文件夹解决了问题。

我在Asp.Net Core 3中遇到了同样的问题,因为我既不熟悉Docker也不熟悉.Net构建系统,所以我使用了Visual Studio创建的默认Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Application/Application.csproj", "Application/"]
COPY ["Dependency1/Dependency1.csproj", "Dependency1/"]
RUN dotnet restore "Application/Application.csproj"
COPY . .
WORKDIR "/src/Application"
RUN dotnet build "Application.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Application.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "application.dll"]
默认情况下,它仅对主应用程序运行
dotnet restore
。在为依赖项目添加相同的参数后,它就可以工作了

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Application/Application.csproj", "Application/"]
COPY ["Dependency1/Dependency1.csproj", "Dependency1/"]
RUN dotnet restore "Dependency1/Dependency1.csproj" <-- this one is new
RUN dotnet restore "Application/Application.csproj"
COPY . .
WORKDIR "/src/Application"
RUN dotnet build "Application.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Application.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "application.dll"]
来自mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim作为基础
WORKDIR/app
暴露80
揭露443
来自mcr.microsoft.com/dotnet/core/sdk:3.1-buster-AS-build
WORKDIR/src
副本[“Application/Application.csproj”,“Application/”]
复制[“Dependency1/Dependency1.csproj”,“Dependency1/”]

运行dotnet restore“Dependency1/Dependency1.csproj”我对Asp.Net Core 3也有同样的问题,因为我既不熟悉Docker也不熟悉.Net构建系统,所以我使用了Visual Studio创建的默认Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Application/Application.csproj", "Application/"]
COPY ["Dependency1/Dependency1.csproj", "Dependency1/"]
RUN dotnet restore "Application/Application.csproj"
COPY . .
WORKDIR "/src/Application"
RUN dotnet build "Application.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Application.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "application.dll"]
默认情况下,它仅对主应用程序运行
dotnet restore
。在为依赖项目添加相同的参数后,它就可以工作了

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Application/Application.csproj", "Application/"]
COPY ["Dependency1/Dependency1.csproj", "Dependency1/"]
RUN dotnet restore "Dependency1/Dependency1.csproj" <-- this one is new
RUN dotnet restore "Application/Application.csproj"
COPY . .
WORKDIR "/src/Application"
RUN dotnet build "Application.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Application.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "application.dll"]
来自mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim作为基础
WORKDIR/app
暴露80
揭露443
来自mcr.microsoft.com/dotnet/core/sdk:3.1-buster-AS-build
WORKDIR/src
副本[“Application/Application.csproj”,“Application/”]
复制[“Dependency1/Dependency1.csproj”,“Dependency1/”]

运行dotnet restore“Dependency1/Dependency1.csproj”将您当前的dockerfile共享给我们。您是否已将
publish
文件夹复制到docker图像?与我们分享您的csproj内容。@TaoZhou很遗憾,我无法分享有问题的项目。我将尝试制作一个示例项目来复制behavoir。JIB不使用Docker,而是直接构建Docker映像(这就是我们要做的)。我将bin/Release文件夹复制到docker映像中,以便在生成的docker容器中路径为
/netcoreapp2.1/publish
。ElasticSearch.dll由我们的一个内部模块使用。请与我们共享您当前的dockerfile。您是否已将
publish
文件夹复制到docker图像?与我们分享您的csproj内容。@TaoZhou很遗憾,我无法分享有问题的项目。我将尝试制作一个示例项目来复制behavoir。JIB不使用Docker,而是直接构建Docker映像(这就是我们要做的)。我将bin/Release文件夹复制到docker映像中,以便在生成的docker容器中路径为
/netcoreapp2.1/publish
。ElasticSearch.dll由我们的一个内部模块使用。