使用Aspose Word(v18.8.0)将文档转换为PDF。当我尝试使用Linux(Alpine)在docker容器内执行代码时,Visual Studio内的代码运行良好

FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100-alpine3.9 AS build-env
WORKDIR /usr/src/app
COPY . .
RUN dotnet publish ./test/test.csproj -c Release -o ./_publish
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0.0-alpine3.9

RUN apk update
RUN apk upgrade --available

RUN apk add libgdiplus --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted
RUN apk --no-cache add msttcorefonts-installer fontconfig freetype-dev libjpeg-turbo-dev libpng-dev && \
    update-ms-fonts && \
    fc-cache -f

RUN apk add Goelze.SkiaSharp.NativeAssets.AlpineLinux --version 1.68.0
RUN apk add --no-cache icu-libs
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8

ENV ASPNETCORE_URLS http://+:5000
WORKDIR /app
COPY --from=build-env /usr/src/app/_publish ./
EXPOSE 5000/tcp
CMD ["dotnet", "test.dll"]

错误:
Connection id "0HLRQ2FV5QQ5J", Request id "0HLRQ2FV5QQ5J:00000001": An unhandled exception was thrown by the application.
System.TypeInitializationException: The type initializer for   ' threw an exception.
 ---> System.TypeInitializationException: The type initializer for 'SkiaSharp.SKImageInfo' threw an exception.
 ---> System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: Error loading shared library liblibSkiaSharp: No such file or directory
   at SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
   at SkiaSharp.SKImageInfo..cctor()

最佳答案

Aspose.Words 18.8使用了SkiaSharp 1.60.3版本。 Goelze.SkiaSharp.NativeAssets.AlpineLinux需要SkiaSharp 1.68.0或更高版本。您应该更新到Aspose.Words 19.2.0版本(在此版本中,使用SkiaSharp的1.68.0版本)。或到最新版本,即使用SkiaSharp的1.68.1版本。

您必须为SkiaSharp添加Linux本机 Assets ,以使其在Linux Alpine中运行。将nuget referenace添加到Goelze.SkiaSharp.NativeAssets.AlpineLinux。也不要忘记在容器中安装 fontconfig 。 SkiaSharp要求使用它来处理字体。这是我用于在Linux Alpine容器中测试Aspose.Words的Dockerfile。

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine3.9 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY Aspose.Words.Docker.Sample/*.csproj ./Aspose.Words.Docker.Sample/
WORKDIR /app/Aspose.Words.Docker.Sample
RUN dotnet restore

# copy and publish app and libraries
WORKDIR /app/
COPY Aspose.Words.Docker.Sample/. ./Aspose.Words.Docker.Sample/
WORKDIR /app/Aspose.Words.Docker.Sample
RUN dotnet publish -c Release -o out

# copy to runtime environment
FROM mcr.microsoft.com/dotnet/core/runtime:2.2-alpine3.9 AS runtime
WORKDIR /app
# fontconfig is required to properly work with fonts in Linux.
RUN apk update && apk upgrade && apk add fontconfig
COPY --from=build /app/Aspose.Words.Docker.Sample/out ./
ENTRYPOINT ["dotnet", "Aspose.Words.Docker.Sample.dll"]

请注意,Goelze.SkiaSharp.NativeAssets.AlpineLinux是针对Alpine Linux 3.9编译的,不适用于3.8。

披露:我在Aspose.Words团队工作。

07-24 09:15