我正在研究.NET Core 2.0应用程序,它可以在VS 2017中将文档转换为PDF,JPEG,PNG并支持Docker。 当我通过IIS Express启动应用程序时一切正常,但如果我在发布模式下将应用程序作为Docker容器启动,则应用程序会抛出错误。
当我转换为PDF时:
The type initializer for 'SkiaSharp.SKManagedStream' threw an exception.
当我转换为JPEG时:
The type initializer for 'SkiaSharp.SKImageInfo' threw an exception.
如何解决该问题?或者它是SkiaSharp或Aspose库的问题?
答案 0 :(得分:0)
问题的原因是SkiaSharp,它的NuGet包中不包含本机libSkiaSharp.so。 https://github.com/mono/SkiaSharp/issues/288
为了解决这个问题,我做了以下几点:
从这里下载libSkiaSharp.so https://github.com/mono/SkiaSharp/releases/tag/v1.59.3
使用以下nuspec创建NuGet包
<?xml version =“1.0”encoding =“utf-8”?> < package xmlns =“http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd”> <元数据> < ID> Aspose.Skia.Linux.Natives< / ID> <版本> 1.59.3< /版本> <标题> Aspose.Skia.Linux.Natives< /标题> <作者>&的Aspose LT; /作者> <业主>&的Aspose LT; /所有者> < requireLicenseAcceptance&GT假LT; / requireLicenseAcceptance> < description>包含适用于Linux的skia原生文< / description> <依赖性> < group targetFramework =“。NETStandard2.0”> < dependency id =“SkiaSharp”version =“1.59.3”/> < /组> < /依赖性> < /元数据> <文件> < file src =“C:\ Temp \ libSkiaSharp.so”target =“runtimes \ linux-x64 \ native \ libSkiaSharp.so”/> < /文件> < /包>
将生成的NuGet包放入私有存储库,并在我的.NET Core Web应用程序中添加对它的引用。
添加了对Aspose.Words NuGet包的引用。
修改后的Dockerfile:
FROM microsoft / aspnetcore:2.0
ARG来源
WORKDIR / app
EXPOSE 80
运行apt-get update&& apt-get install -y libfontconfig1
COPY $ {source:-obj / Docker / publish}。
ENTRYPOINT [“dotnet”,“WebApplication1.dll”]
正如你所看到的,我添加了“RUN apt-get update&& apt-get install -y libfontconfig1”,因为libSkiaSharp.so似乎依赖它。
我与Aspose一起担任开发者布道者。
答案 1 :(得分:0)
似乎问题出在服务器计算机上对.nuget > packages
的访问权限上。我在服务器计算机上遇到了类似的问题,没有获得应用程序池的许可。