使用开源库时,我们应该针对源代码还是二进制文件进行编译?

时间:2013-02-24 11:11:11

标签: c# open-source

在项目中使用开源库(例如SharpPcap或FakeItEasy)时,我们应该将源代码添加到解决方案中,还是针对DLL进行编译并将它们放在解决方案的目录中?

6 个答案:

答案 0 :(得分:4)

您应该使用二进制文件进行编译。

原因很简单:您的项目和第三方库是不同的项目,在您自己的构建过程中编译其他库可能会带来不必要的复杂性和项目依赖性。

某些库要求您在您的环境中安装一些工具和插件。

不是在构建过程中包含开源代码,通常我在Visual Studio解决方案的根目录中都有一个依赖 lib 目录,其中包含二进制文件和源代码。当我想调试第三方代码时,我只需打开另一个Visual Studio实例,然后将调试器附加到整个过程中。

认为一些第三方开源库非常胖,也许你自己的代码库很小:既然你添加了很多源代码,你的构建过程会因为你刚添加了无用的东西而延迟很多(代码,插件) -INS ....)。

我更喜欢将构建过程委托给库的作者的原则,在我的例子中,我认为自己是这种库的使用者:我不需要每次都重新编译它。

啊,如果您计划修改源代码,最佳做法应该是联系作者并向他/她发送补丁,以便他/她可以将其包含在官方发行版中。如果没有,您知道:每次作者发布新版本时,您都会有额外的工作将新源代码与您自己的更改合并......

答案 1 :(得分:1)

我会说使用提供的二进制文件作为源代码可能不稳定,如果你得到它的最新版本。但如果他们提供版本化的二进制文件,那么他们很可能已经过测试并且稳定。

这还取决于您是否只是开箱即用或是否要修改它。

答案 2 :(得分:1)

通常我会编译二进制文件。我在我的解决方案上有一个文件夹vendor / libs,或者我只是使用NuGet,然后编译dll。

但是,有时我需要调试开源库,当事情没有按预期发生时。然后,我链接源代码(仅用于调试)。

进入制作时,我使用二进制文件,因为代码已经过很好的测试。

答案 3 :(得分:1)

我认为既不

以下是 NOT 放置源代码的原因:

  • 开发人员可能会不小心修改代码
  • 图书馆通常会有变化

以下是 DO 包含解决方案的DLL的原因:

  • 使部署更容易
  • 减少使用不兼容版本库的可能性
  • 减少遗失参考的可能性

那么,怎么样?

  1. 向解决方案添加一个名为Class Library的唯一名称的新ClassLibrary1项目

  2. 在其项目设置的Build页面中,将Output path配置为应用程序输出路径

  3. Build Events页面中,将以下行添加到Post-build event command line块:

    del "$(TargetPath)"
    
  4. 将外部DLL复制到其文件夹并将其添加到ClassLibrary1的引用

  5. Copy Local设置为所有已添加引用的true

  6. 为其设置Project Dependancies个其他项目,请查看ClassLibrary1

  7. 添加其他项目的引用,从DLL放入ClassLibrary1

  8. 的路径
  9. 将其他项目中所有这些添加的DLL的Copy Local设置为false

  10. 因此,项目ClassLibrary1是解决方案外部库的中央控件。每次Rebuild SolutionClassLibrary1将添加到其References的最新DLL复制到应用程序输出文件夹,并删除它自己生成的名为ClassLibrary1.DLL的DLL。在编译时或运行时的应用程序将使用相同版本的DLL,您不需要在每次发布应用程序时进行额外的部署或检查每个部署。

答案 4 :(得分:0)

二进制文件:

  • 更稳定,除非您注意拉动源版本
  • 更容易

来源:

  • 可以修改
  • 可以通过直接进入源
  • 来调试API的使用

最后一点通常很重要,所以即使您只使用二进制文件,也要准备好在IDE中下载和打开源代码,特别是如果您使用的库是年轻或经过严格测试的。

答案 5 :(得分:0)

Occam的剃刀说如果你不需要修改库,就应该使用二进制文件。