C# 我应该如何在开源项目中包含外部库?
我已经创建了一个从VisualStudio运行的开源项目。但它也依赖一些外部库来工作。这些库也是开源的。我想知道的问题是我是否应该C# 我应该如何在开源项目中包含外部库?,c#,open-source,C#,Open Source,我已经创建了一个从VisualStudio运行的开源项目。但它也依赖一些外部库来工作。这些库也是开源的。我想知道的问题是我是否应该 将用户指向这些库,让他们下载源代码,然后将它们添加到项目中 将用户指向dll并让他们直接引用它 将dll直接包含到项目中 将这些库的源代码直接包含到项目中 做这件事的最佳方式或标准方式是什么?有一些准则不是开源的,但我认为它们是适用的 我总是在源代码管理中包含所有外部库的二进制文件(标准库除外,如System.dll)。这样,签出源代码的人可以立即构建项目。此外,我
做这件事的最佳方式或标准方式是什么?有一些准则不是开源的,但我认为它们是适用的
我总是在源代码管理中包含所有外部库的二进制文件(标准库除外,如System.dll)。这样,签出源代码的人可以立即构建项目。此外,我可以轻松切换到较旧版本的project,并立即在用于构建该版本的版本中建立依赖关系-这在调试较旧版本的软件时特别有用。我见过的大多数项目都包含一个第三方文件夹(或类似的东西),其中包含项目中的dll文件,项目引用了这些。这确保每个人都有相同的版本,并且不需要更改引用 如果它在版本控制中,那么如果您需要切换回早期版本,它也会使调试变得更容易。(1)对于用户下载项目的源代码是合适的,前提是依赖项列表不会失控,并且仍然很容易获取 (2) 基本上与(1)相同,只要您引用的是其他人构建的二进制文件。我不会在自己的包之外自己构建和分发dll (3) 对于二进制发行版,我会这样做,并包含每个依赖项,以便我的软件运行“开箱即用” (4) 除非出于某种原因需要分叉其他库,否则不要这样做(希望这种情况永远不会发生)
编辑:对于您自己的源代码管理,请执行最简单的操作。我的建议仅适用于您的发行版(源代码和二进制)。将源代码放在自己的版本控制中的第三方库中,或者只是将头文件和二进制库放在其中,这并不少见,因为这取决于库的大小、可用性和波动性 它们越大,您越不希望包含它们,也越希望指向它们 您的用户在获取它们时可能遇到的问题越多,您就越希望包含它们。Sourceforge上的一些东西可能会留在那里,但Joe个人网站上的一些东西可能不会 如果库可能会更改而导致问题,则需要在项目中包含一个版本 如果库可能会更改以改进某些内容而不破坏某些内容,则您需要指向它们 至少,您应该提供DLL,除非它们太大,并用版本标记它们
此外,请检查许可证。特别是在像GPL这样的copyleft许可证下,您可能有义务确保所有内容的源代码都是您自己可用的。您可以根据自己的喜好使其简单或复杂。作为一个用户,我希望所有库都包含在产品的可下载发行版中。对于那些只想用最少的麻烦来使用您的项目的人来说,这使事情尽可能简单。下载外部库对用户来说确实很困难(尤其是在.Net世界中),给它们一组已知的良好依赖关系会有很大帮助。您应该给它们至少两个选项:
- 二进制下载,所有可执行文件和库(无源代码)
- 您自己的代码的完整源代码(mo外部库源代码)
当然,您应该提供指向图书馆主页的链接。如果您是在GPL下分发,您还必须准备好自己直接提供库源。用版本标记它们是什么意思?指定他们应该使用的版本?还是指定您使用的版本。这样,他们就可以很好地保证构建与您提供的相同的软件。感谢所有回答的人。基本上,答案都差不多,我会选择最快的答案。