首页 > 解决方案 > .NET Framework 4.6 中 GStreamer 的 DLL 名称映射问题

问题描述

我正在尝试将 GStreamer 合并到我正在开发的 .NET Framework 4.6 应用程序中。我正在按照此处的这些说明安装 GStreamer 。我将它与 GStreamer.Sharp.Connector nuget 包连接起来。我遇到的问题是该软件包正在寻找 gstreamer-1.0-0.dll 但我的安装正在创建“ lib gstreamer-1.0-0.dll”。我想我在某处读到“lib”前缀与 Windows 10 有关,但我似乎找不到太多关于原因的信息。

在尝试将其合并到我的 .NET Framework 应用程序中之前,我构建了一个快速的 .NET Core 应用程序并使用gstreamer-sharp-netcore nuget 包将所有内容连接起来,并且能够让它正常工作。在未能使其与 .NET Framework 一起使用后,我研究了核心项目的工作方式,它使用以下代码来解决我在使用 Framework 时遇到的“lib”问题。

            if(!NativeLibrary.TryLoad(mappedName, assembly, dllImportSearchPath, out handle))
            {
                if(RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    if(mappedName.StartsWith("lib", true, null))
                    {
                        NativeLibrary.TryLoad(mappedName.Substring(3), assembly, dllImportSearchPath, out handle);
                    }
                    else
                    {
                        NativeLibrary.TryLoad($"lib{mappedName}", assembly, dllImportSearchPath, out handle);
                    }
                }
           }

不幸的是,框架中不存在 NativeLibrary。我确实注意到 .NET Framework 5.0 有一个委托,您可以在执行 DllImports 时使用类似的结果,但它在 4.6 中不可用,我们目前无法升级我们的框架版本。

我的问题是:

  1. 为什么我的安装会在每个 DLL 的前面添加“lib”?从所有人的角度来看,这似乎不应该发生,因为所有代码示例都引用了没有“lib”前缀的 DLL。

  2. 除了重写我自己的 nuget 包之外,我还有哪些选择可以让这个东西正常工作?令人沮丧的是,当我觉得应该有一个简单的解决方案时,三个小字母给我带来了大量的工作。

  3. 有没有办法挂钩 .NET 4.6 中的 [DllImport] 属性并告诉它寻找正确的 DLL?

标签: c#dllmingwgstreamerdllimport

解决方案


推荐阅读