【问题标题】:Getting System.DllNotFoundException when deploying asp.net core (using NAudio) to Kubernetes将 asp.net 核心(使用 NAudio)部署到 Kubernetes 时出现 System.DllNotFoundException
【发布时间】:2019-11-26 03:52:24
【问题描述】:

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

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

System.DllNotFoundException:无法加载共享库 'Msacm32.dll' 或其依赖项之一。为了帮助诊断 加载问题,考虑设置 LD_DEBUG 环境变量: libMsacm32.dll:无法打开共享对象文件:没有这样的文件或 NAudio.Wave.Compression.AcmInterop.acmStreamOpen2(IntPtr& hAcmStream, IntPtr hAcmDriver, IntPtr sourceFormatPointer, IntPtr destFormatPointer, WaveFilter waveFilter, IntPtr 回调, IntPtr 例如,AcmStreamOpenFlags openFlags) 在 NAudio.Wave.Compression.AcmStream..ctor(WaveFormat sourceFormat, WaveFormat destFormat) 在 NAudio.Wave.WaveFormatConversionProvider..ctor(WaveFormat targetFormat, IWaveProvider sourceProvider) 在 NAudio.Wave.WaveFormatConversionStream..ctor(WaveFormat targetFormat, WaveStream 源流)在 Web.API.GoogleApi.GoogleSpeechSession.WriteBufferToStreamingContext(字节[] 缓冲区)在 /app/GoogleApi/GoogleSpeechSession.cs:line 385 at Web.API.GoogleApi.GoogleSpeechSession.SubmitToGoogle(Byte[] buffer) 在 /app/GoogleApi/GoogleSpeechSession.cs:406 行

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

如果您知道,请帮助我。 谢谢

【问题讨论】:

  • 更多输入可能吗?在我看来,您使用的是 Windows 库 (.dll),由于非常明显的原因,它没有在 Linux 上运行。你在做 P/invoke 吗?或者它是一个nuget包?您是否针对 Linux 运行时部署了它?不如看看this issue
  • 我尝试同时使用 Nuget 和 windows 库 (.dll)。也许它们不受 Kubernetes 上的 Linux 支持

标签: c# docker asp.net-core kubernetes naudio


【解决方案1】:

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

音频库之类的东西通常是特定于平台的,使用特定操作系统提供的 API、仅与特定操作系统兼容的驱动程序等。我想这就是这种情况:您的 NAudio 库仅适用于 Windows。如果您要使用 linux 容器,则需要找到一个跨平台或可在 linux 中运行的库。

.NET Core 2.0 开始允许引用 .NET Framework 库以方便使用。有大量 .NET Framework 库和组件,其中许多不再更新,但与 .NET Standard 以及因此与 .NET Core 完美兼容。但是,能够添加引用并不能保证能够真正工作,尤其是跨平台工作。

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

【讨论】:

  • 确切地说,OP 正在尝试在 Linux 上运行,在这种情况下将没有 ACM 库,或者它们运行在没有安装这些媒体编解码器的 Windows Server 版本上(也一种可能性)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多