我应该如何在开源项目中包含外部库?

时间:2009-07-24 15:49:56

标签: c# open-source

我创建了一个从Visual Studio运行的开源项目。但它依赖于一些外部库来工作。这些库也是开源的。我想知道的问题是我是否应该

  1. 将用户指向这些库并让他们下载源代码,然后将其添加到项目中
  2. 将用户指向dll并让他们直接引用它
  3. 将dll直接包含在项目中
  4. 将这些库的源代码直接包含在项目中
  5. 这是最好的方式或标准方式吗?

6 个答案:

答案 0 :(得分:3)

有些指南并非特定于开源,但我认为它们适用。

我总是在源代码管理中包含所有外部库的二进制文件(除了System.dll等标准库)。这样,签出源代码的人可以立即构建项目。此外,我可以轻松切换到旧版本的项目,并立即在用于构建该修订版本的版本中具有依赖性 - 这在调试旧版软件时特别有用。

答案 1 :(得分:1)

我见过的大多数项目都包含一个ThirdParty文件夹(或类似的东西)和项目中的dll文件,项目引用了这些文件。这样可以确保每个人都拥有相同的版本,并且无需更改参考文献。

如果它在版本控制中,如果你需要切换回早期版本,它也可以更容易调试。

答案 2 :(得分:1)

(1)对于下载项目源代码的用户来说很好,假设依赖项列表没有失控,并且它们仍然很容易获取。

(2)与(1)基本相同,只要您指的是其他人构建的二进制文件即可。我不会在你自己的软件包之外构建和分发dll。

(3)对于二进制发行版,我会这样做,并包含所有依赖项,以便我的软件“开箱即用”

(4)除非你出于某种原因需要分叉其他库,否则不要这样做(希望这种情况永远不会发生)

编辑:对于您自己的源代码管理,请执行最简单的操作。我的建议仅适用于您的发行版(源代码和二进制文件)。将源代码放在您自己的版本控制中的第三方库中,或者只是将头文件和二进制库放入其中 - 这对您的情况最有效。

答案 3 :(得分:0)

我认为这取决于图书馆的规模,可用性和波动性。

它们越大,您想要包含的越少,您想要指向它们的次数就越多。

您的用户获得这些问题可能遇到的问题越多,您想要包含的问题就越多。 Sourceforge上的东西可能会留在那里,但Joe的个人网站上可能没有。

如果库可能会更改以导致问题,则您希望在项目中包含一个版本。

如果库可能会改变以改进某些东西而不会破坏东西,那么你想指向它们。

至少,你应该提供DLL,除非它们太大,并用版本标记它们。

另外,请检查许可证。特别是在像GPL这样的Copyleft许可下,您可能有义务确保所有内容的来源都是可用的。

答案 4 :(得分:0)

您可以根据自己的喜好制作简单或复杂的内容。作为用户,我更喜欢将所有库都包含在产品的可下载发行版中。对于那些只想轻松使用您的项目的人来说,这使得事情变得尽可能简单。下载外部库对于用户来说确实很困难(特别是在.Net世界中),并且为他们提供一组已知良好的依赖关系可能是一个真正的帮助。

答案 5 :(得分:0)

你应该给他们至少两个选择:

  • 二进制下载,所有可执行文件和库(无源)
  • 您自己的代码的完整源代码(外部库源)

除非您修改了外部库,否则不应提供外部库的源代码,在这种情况下,您必须这样做。提供图书馆资源只会增加您可以从中获取资源的各个地方,并增加对您所拥有版本的混淆。

当然,您应该提供指向图书馆主页的链接。如果您使用GPL进行分发,您还必须准备好直接自己提供库源。

相关问题