将 asp.net 核心(使用 NAudio)部署到 Kubernetes 时获取 System.DllNotFoundException

Getting System.DllNotFoundException when deploying asp.net core (using NAudio) to Kubernetes

我将 asp.net 核心应用程序 docker 映像部署到 Kubernetes 集群。我的应用程序使用 NAudio 从用户那里获取麦克风流并发送到 Google Speech-To-Text。

但是在我部署之后,在 Kubernetes 日志记录中出现以下错误:

System.DllNotFoundException: Unable to load shared library 'Msacm32.dll' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libMsacm32.dll: cannot open shared object file: No such file or directory at NAudio.Wave.Compression.AcmInterop.acmStreamOpen2(IntPtr& hAcmStream, IntPtr hAcmDriver, IntPtr sourceFormatPointer, IntPtr destFormatPointer, WaveFilter waveFilter, IntPtr callback, IntPtr instance, AcmStreamOpenFlags openFlags) at NAudio.Wave.Compression.AcmStream..ctor(WaveFormat sourceFormat, WaveFormat destFormat) at NAudio.Wave.WaveFormatConversionProvider..ctor(WaveFormat targetFormat, IWaveProvider sourceProvider) at NAudio.Wave.WaveFormatConversionStream..ctor(WaveFormat targetFormat, WaveStream sourceStream) at Web.API.GoogleApi.GoogleSpeechSession.WriteBufferToStreamingContext(Byte[] buffer) in /app/GoogleApi/GoogleSpeechSession.cs:line 385 at Web.API.GoogleApi.GoogleSpeechSession.SubmitToGoogle(Byte[] buffer) in /app/GoogleApi/GoogleSpeechSession.cs:line 406

那么,有什么办法可以将NAudio部署到Kubernetes上吗?或者我必须换到另一个图书馆?

知道的请帮帮我。 谢谢

考虑到 Kubernetes 直到最近才开始支持 Windows 容器,而且这种支持仍然很粗略,以至于实际上 Windows 容器仍然不受支持,我想你 运行 linux 个容器。

音频库之类的东西通常会 platform-specific,使用特定操作系统提供的 API,仅与特定操作系统兼容的驱动程序等。我想这就是这种情况: 您的 NAudio 库仅适用于 Windows。如果您要使用 linux 个容器,您需要找到一个 cross-platform 或将在 linux 中工作的库。

.NET Core 2.0 开始允许引用 .NET Framework 库以方便使用。那里有大量的 .NET Framework 库和组件,其中许多不再更新,但仍然与 .NET Standard 和 .NET Core 完美兼容。但是,能够添加引用并不能保证 实际上 工作,特别是 cross-platform.

无论如何,您应该尝试在开发中尽可能地模拟您的生产环境。特别是这里,如果你要部署到 Kubernetes 中的 linux 个容器,那么你应该在你的开发环境中使用 linux 个容器(Docker 完全支持 Windows) 甚至实际使用 Kubernetes(内置于 Docker for Windows)。