1

我正在开发 .NET Core 2.0 应用程序,该应用程序在 VS 2017 中使用 Docker 支持将文档转换为 PDF、JPEG、PNG。当我通过 IIS Express 启动应用程序时,一切正常,但如果我在发布模式下将应用程序作为 Docker 容器启动,则应用程序会引发错误。

  1. 当我转换为 PDF 时:

    The type initializer for 'SkiaSharp.SKManagedStream' threw an exception.

  2. 当我转换为 JPEG 时:

    The type initializer for 'SkiaSharp.SKImageInfo' threw an exception.

我该如何解决这个问题?还是 SkiaSharp 或 Aspose 库的问题?

4

2 回答 2

0

问题的原因是 SkiaSharp,它的 NuGet 包中不包含本机 libSkiaSharp.so。 https://github.com/mono/SkiaSharp/issues/288

为了解决这个问题,我做了以下事情:

  1. 从这里下载 libSkiaSharp.so https://github.com/mono/SkiaSharp/releases/tag/v1.59.3

  2. 使用以下 nuspec 创建了 NuGet 包

    <?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>Aspose .Skia.Linux.Natives</id> <version>1.59.3</version> <title>Aspose.Skia.Linux.Natives</title> <authors>Aspose</authors> <owners>Aspose</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>包含适用于 Linux 的skia native</description> <dependencies> <group targetFramework=".NETStandard2.0"> <dependency id="SkiaSharp" version="1.59.3" /> </group> </dependencies> </metadata> <files> <file src="C:\Temp\libSkiaSharp.so" target="runtimes\linux-x64\native\libSkiaSharp.so"/> </files> </package>

  3. 将生成的 NuGet 包放入私有存储库,并在我的 .NET Core Web 应用程序中添加对它的引用。

  4. 添加了对 Aspose.Words NuGet 包的引用。

  5. 修改后的 Dockerfile:

来自微软/aspnetcore:2.0

ARG 源

工作目录 /app

曝光 80

运行 apt-get update && apt-get install -y libfontconfig1

复制 ${source:-obj/Docker/publish} 。

入口点 ["dotnet", "WebApplication1.dll"]

如您所见,我添加了“RUN apt-get update && apt-get install -y libfontconfig1”,因为 libSkiaSharp.so 似乎依赖于它。

我与 Aspose 一起担任开发人员宣传员。

于 2018-02-13T10:09:14.010 回答
0

似乎问题在于.nuget > packages对服务器计算机的访问权限。我在我的服务器机器上遇到了类似的问题,没有授予应用程序池的权限。

于 2018-12-13T02:58:17.030 回答