c# - .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 中不可用,我们目前无法升级我们的框架版本。
我的问题是:
为什么我的安装会在每个 DLL 的前面添加“lib”?从所有人的角度来看,这似乎不应该发生,因为所有代码示例都引用了没有“lib”前缀的 DLL。
除了重写我自己的 nuget 包之外,我还有哪些选择可以让这个东西正常工作?令人沮丧的是,当我觉得应该有一个简单的解决方案时,三个小字母给我带来了大量的工作。
有没有办法挂钩 .NET 4.6 中的 [DllImport] 属性并告诉它寻找正确的 DLL?
解决方案
推荐阅读
- r - 有没有办法处理顶点属性数据?
- javascript - 检测鼠标碰撞画布文本(JS)
- swift - 问题循环播放视频不停| 迅速
- r - 在 R 中可视化固定效应回归
- python-2.7 - 在 python 中使用广义 Hebbian 学习(Sanger 规则)查找特征向量
- javascript - 如何使用 if(checkbox.checked) 禁用特定的 javascript?
- html - 如何使用 bootstrap4 更改标签栏中的内容?
- c# - 会话值在使用 SQL Server 会话状态保存后为 NULL
- spring-boot - 未调用订阅者
- r - 将列表循环到 N 元素