c# - 应该向哪个项目添加 LibVLC 依赖项?
问题描述
我有一个带有 .NET Framework 项目的解决方案,A
它构建了一个包含类的 winforms 应用程序,该类MyPlayer
需要LibVLCSharp。为了使应用程序能够正确构建和运行,我必须添加以下 Nuget 包:
- LibVLCSharp
- LibVLCSharp.WinForms
- VideoLAN.LibVLC.Windows
现在我想将类移动MyPlayer
到一个单独的 .NET Standard 类库 ProjectB
中,以便将功能从 UI 中分离出来,以便它可以被针对不同平台的多个其他项目使用。为了B
编译,我只需要添加LibVLCSharp Nuget 包。然后我设置B
为参考A
。
显然,ProjectA
将以某种方式需要其他两个 Nuget 包,但我不确定将它们添加到哪个项目最合适。在这种情况下最有意义的是什么?还是真的只有一种方法可以工作?
解决方案
这是一个很好的问题,我不知道它是否正确记录在 LibVLCSharp 上。
简短的回答:
- LibVLC 必须始终在可执行项目中引用 (A)
- WinForms 与.net 标准不兼容,因此如果您继续使用netstandard,则无法在B 中引用它。
- 如果您需要,LibVLCSharp 可以在项目 B 中“向上”移动。
长答案:
让我们详细看看这些包:
VideoLAN.LibVLC.Windows
: 这个包包含使 libvlc 在 Windows 上工作所需的 dll 文件。它还包含用于将 DLL 复制到项目的输出目录的 msbuild 文件。您的应用程序中需要这些文件,因此您需要在A
. (它们不会被项目引用传递复制)LibVLCSharp.WinForms
: 如此处所述,此包仅支持 .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依赖
推荐阅读
- c++ - 检查指针在析构函数中不为空
- laravel - 随着时间的推移,使用 Laravel 部分重构旧的大型 PHP 应用程序?
- lua - Lua 错误:'
' 预期的 - vba - Excel 宏修改(或者可能是 VBA)以更新最后包含的工作表
- jquery - jQuery、Primefaces 和 Java 未捕获的 ReferenceError
- python - Mac OSX 的安装程序未提供将路径更改为 Python 3.5.2 版本的选项
- regex - RPA(blueprism) 日期验证
- android - 我正在尝试在 Windows 10(32 位)中安装 Android Studio – studio.exe 根本无法打开
- c# - Cursor = Cursors.None 用于代码中的弹出窗口
- c - c - 多线程图像处理性能问题