Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应该向哪个项目添加LibVLC依赖项?_C#_.net_Project Reference_Libvlcsharp - Fatal编程技术网

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

C# 应该向哪个项目添加LibVLC依赖项?,c#,.net,project-reference,libvlcsharp,C#,.net,Project Reference,Libvlcsharp,我有一个.NET Framework项目a的解决方案,它构建了一个winforms应用程序,其中包含一个类MyPlayer,该类需要LibVLCSharp。为了使应用程序能够正确构建和运行,我必须添加以下Nuget软件包: LibVLCSharp LibVLCSharp.WinForms VideoLAN.LibVLC.Windows 现在我想将类MyPlayer移动到一个单独的.NET标准类库ProjectB,将函数从UI中分离出来,这样它就可以被针对不同平台的多个其他项目使用。为了编译B

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

  • LibVLCSharp
  • LibVLCSharp.WinForms
  • VideoLAN.LibVLC.Windows
现在我想将类
MyPlayer
移动到一个单独的.NET标准类库Project
B
,将函数从UI中分离出来,这样它就可以被针对不同平台的多个其他项目使用。为了编译
B
,我只需添加LibVLCSharpNuget包。然后我将
B
设置为
a
的参考


显然,Project
A
需要另外两个Nuget包,但我不确定将它们添加到哪个项目中最合适。在这种情况下,什么最有意义?或者它真的只有一种工作方式吗?

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

简短答复:

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

让我们详细看看这些包:

  • 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中可传递地使用,而无需将其添加到项目A中

如果您的观点是在.net framework和.net core中都有一个播放器表单,我建议您使用多目标,将其放在您的B项目中:

net40;netcoreapp3.0

否则,如果只是为了共享非ui代码,您不需要B中的LibVLCSharp.WinForms依赖项,这正是我需要的,谢谢!你在长篇回答中的第一个要点是我最感兴趣的,但你最后的评论也很有帮助,因为我希望项目B作为一种多平台和可共享的东西(而不涉及UI)。当我尝试这一点时,我最终完全不需要WinForms引用,LibVLCSharp继续进行项目B,VideoLAN.LibVLC.Windows继续进行项目A。一切正常。