List & Label 29在 Alpine的 .NET 8 Docker容器中导出PDF失败,显示“Platform not supported”
我正在尝试在AWS的 Docker容器中,使用.NET 8 / C#运行List & Label 29。
应用程序本身在容器内可以成功构建并启动。问题只在我尝试启动PDF导出时才会出现。
在此时我会得到一个异常:
平台不受支持
我的当前设置大致如下:
- .NET 8.0
- 语言:C#
- List & Label版本:29
- 运行时环境:在AWS上的Docker
- 基础镜像:Alpine Linux
- 部署:标准的Visual Studio部署 / 发布输出
Docker镜像基于Alpine,例如:
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine
应用程序的相关部分在我的开发机上工作正常,且在容器中项目也能成功编译。只有在运行时触发PDF导出时才会失败。
一个简化的失败代码版本如下所示:
using (var ll = new ListLabel())
{
// data source and options are configured here
ll.ExportOptions.Add(LlExportOption.ExportTarget, "PDF");
ll.ExportOptions.Add(LlExportOption.ExportFile, "/tmp/test.pdf");
ll.Export();
}
在调用导出功能时抛出异常。
如何在基于Alpine的 Linux Docker容器中运行List & Label 29?
我怀疑问题可能与Alpine使用musl而非glibc,或PDF导出所需的原生依赖缺失有关,但目前还没有找到明确的答案。
是否有人在.NET 8的 Docker容器中成功使用List & Label 29的 PDF导出?如果有,所需的基础镜像和依赖有哪些?
解决方案
这里要点是,List & Label 29并不是适用于这种场景的正确产品/运行时。
使用List & Label 29,您是在使用经典的Windows/.NET部署。在Linux容器中能够编译,并不意味着所需的原生运行时组件在该平台上可用或受支持。仅在导出PDF时发生失败,是这类问题的典型表现:托管的.NET代码可以正常加载,但导出最终需要List & Label的原生功能,而该运行时在该平台上不可用。
在Linux/Docker场景中运行List & Label的受支持方式是 List & Label Cross Platform(LLCP)。该功能从List & Label 31开始提供。
实际操作层面,这意味着:
- 升级到List & Label 31或更高版本。
- 使用LLCP运行时/API,而不是经典的Windows List & Label部署。
- 使用受支持的Linux基础镜像。Alpine完全受支持,请参阅 LLCP文档。
- 根据上面链接的文档,安装LLCP运行时所需的原生依赖。
因此,问题并非由C#或 .NET 8自身引起,而是运行时/平台的支持问题。应用程序之所以能编译,是因为存在的.NET引用,但在List & Label需要的原生功能无法在该Linux/Alpine环境中使用时,导出就会失败。不幸的是,对于你提到的29版本,没有解决方案。你需要使用List & Label 31或更高版本并结合LLCP。不要在Alpine Linux容器中尝试运行经典的List & Label 29部署。对于AWS/Docker/Linux的 PDF导出,请切换到LLCP,并使用一个受支持的Linux基础镜像,且安装了文档中所述的原生依赖。你可以通过安装相应的NuGet包来试用LLCP,参见 相应的NuGet包。