应该向哪个项目添加 LibVLC 依赖项?

Posted

技术标签:

【中文标题】应该向哪个项目添加 LibVLC 依赖项?【英文标题】:To which Project should LibVLC dependencies be added? 【发布时间】:2020-08-12 06:34:25 【问题描述】:

我有一个 .NET Framework 项目 A 的解决方案,它构建了一个包含类 MyPlayer 的 winforms 应用程序,该类需要 LibVLCSharp。为了使应用程序能够正确构建和运行,我必须添加以下 Nuget 包:

LibVLCSharp LibVLCSharp.WinForms VideoLAN.LibVLC.Windows

现在我想将类 MyPlayer 移动到一个单独的 .NET Standard 类库,Project B,以将功能从 UI 中分离出来,以便它可以被多个其他项目使用针对不同平台。为了让B 编译,我只需要添加 LibVLCSharp Nuget 包。然后我将B 设置为A 的参考。

显然,项目A 会以某种方式需要其他两个 Nuget 包,但我不确定将它们添加到哪个项目最合适。在这种情况下什么最有意义?还是真的只有一种方法可以工作?

【问题讨论】:

【参考方案1】:

这是一个好问题,我不知道它是否在 LibVLCSharp 上正确记录。

简答:

必须始终在可执行项目 (A) 上引用 LibVLC WinForms 与 .net 标准不兼容,所以如果继续使用 netstandard,则无法在 B 中引用它。 如果您需要,LibVLCSharp 可以在项目 B 中“向上”移动。

长答案:

让我们详细看看这些包:

VideoLAN.LibVLC.Windows:此软件包包含使 libvlc 在 Windows 上工作所需的 dll 文件。它还包含用于将 DLL 复制到项目的输出目录的 msbuild 文件。您的应用程序中需要这些文件,因此您需要在 A 中引用此包。 (它们不会被项目引用传递复制)

LibVLCSharp.WinForms : 如here 所述,此软件包仅支持 .NET framework 4.0 及以上版本,以及 .net core 3.0 及以上版本。您将无法在B 中添加此包,除非您替换您的netstandard 约束并改用多目标。它仅适用于 WinForms 可用的情况。

LibVLCSharp 可以在项目B 中引用,没有任何问题。由于您使用的是 .net 标准,因此您很可能也在使用“SDK 样式”csproj 格式和PackageReference。然后,该依赖项将在项目 A 中传递而无需添加。

如果您的观点是在 .net 框架和 .net 核心中都有可用的播放器表单,我建议您使用多目标,将其放入您的 B 项目中:

<TargetFrameworks>net40;netcoreapp3.0</TargetFrameworks>

否则,如果只是为了共享非ui代码,则不需要B中的LibVLCSharp.WinForms依赖

【讨论】:

正是我需要的,谢谢!您在长答案中的第一个项目符号是我最感兴趣的,但您最后的 cmets 也有帮助,因为我希望项目 B 作为多平台和可共享的东西(而不涉及 UI)是有意义的。当我尝试这个时,我最终根本不需要 WinForms 参考,LibVLCSharp 继续项目 B,VideoLAN.LibVLC.Windows 继续项目 A。一切正常。

以上是关于应该向哪个项目添加 LibVLC 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用预安装的 libv8 gem 和预编译的 v8 依赖项在 aarch64 上安装 therubyracer?

Android Studio - 向所有模块添加依赖项

在 sbt 中添加仅编译时依赖项

在 Rails 应用程序中,therubyracer 或 libv8 有啥用?

向 Android Cordova 插件添加依赖项

在向外部依赖项添加扩展时中止陷阱6