将ASP.NET Core(使用NAudio)部署到Kubernetes时获取System.DllNotFoundException

时间:2019-07-17 10:24:20

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

我将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 sourceStream)位于   Web.API.GoogleApi.GoogleSpeechSession.WriteBufferToStreamingContext(Byte []   缓冲区)在/app/GoogleApi/GoogleSpeechSession.cs:第385行中   Web.API.GoogleApi.GoogleSpeechSession.SubmitToGoogle(Byte [] buffer)在   /app/GoogleApi/GoogleSpeechSession.cs:line 406

那么,有什么方法可以将NAudio部署到Kubernetes?还是我必须换一个图书馆?

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

1 个答案:

答案 0 :(得分:2)

考虑到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(在Windows的Docker中内置)。