我将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?还是我必须换一个图书馆?
如果您知道的话,请帮助我。 谢谢
答案 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中内置)。