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