在项目中使用开源库(例如SharpPcap或FakeItEasy)时,我们应该将源代码添加到解决方案中,还是针对DLL进行编译并将它们放在解决方案的目录中?
答案 0 :(得分:4)
您应该使用二进制文件进行编译。
原因很简单:您的项目和第三方库是不同的项目,在您自己的构建过程中编译其他库可能会带来不必要的复杂性和项目依赖性。
某些库要求您在您的环境中安装一些工具和插件。
不是在构建过程中包含开源代码,通常我在Visual Studio解决方案的根目录中都有一个依赖或 lib 目录,其中包含二进制文件和源代码。当我想调试第三方代码时,我只需打开另一个Visual Studio实例,然后将调试器附加到整个过程中。
认为一些第三方开源库非常胖,也许你自己的代码库很小:既然你添加了很多源代码,你的构建过程会因为你刚添加了无用的东西而延迟很多(代码,插件) -INS ....)。
我更喜欢将构建过程委托给库的作者的原则,在我的例子中,我认为自己是这种库的使用者:我不需要每次都重新编译它。
啊,如果您计划修改源代码,最佳做法应该是联系作者并向他/她发送补丁,以便他/她可以将其包含在官方发行版中。如果没有,您知道:每次作者发布新版本时,您都会有额外的工作将新源代码与您自己的更改合并......
答案 1 :(得分:1)
我会说使用提供的二进制文件作为源代码可能不稳定,如果你得到它的最新版本。但如果他们提供版本化的二进制文件,那么他们很可能已经过测试并且稳定。
这还取决于您是否只是开箱即用或是否要修改它。
答案 2 :(得分:1)
通常我会编译二进制文件。我在我的解决方案上有一个文件夹vendor / libs,或者我只是使用NuGet,然后编译dll。
但是,有时我需要调试开源库,当事情没有按预期发生时。然后,我链接源代码(仅用于调试)。
进入制作时,我使用二进制文件,因为代码已经过很好的测试。
答案 3 :(得分:1)
我认为既不。
以下是 NOT 放置源代码的原因:
以下是 DO 包含解决方案的DLL的原因:
那么,怎么样?
向解决方案添加一个名为Class Library
的唯一名称的新ClassLibrary1
项目
在其项目设置的Build
页面中,将Output path
配置为应用程序输出路径
在Build Events
页面中,将以下行添加到Post-build event command line
块:
del "$(TargetPath)"
将外部DLL复制到其文件夹并将其添加到ClassLibrary1
的引用
将Copy Local
设置为所有已添加引用的true
为其设置Project Dependancies
个其他项目,请查看ClassLibrary1
添加其他项目的引用,从DLL放入ClassLibrary1
将其他项目中所有这些添加的DLL的Copy Local
设置为false
因此,项目ClassLibrary1
是解决方案外部库的中央控件。每次Rebuild Solution
,ClassLibrary1
将添加到其References
的最新DLL复制到应用程序输出文件夹,并删除它自己生成的名为ClassLibrary1.DLL
的DLL。在编译时或运行时的应用程序将使用相同版本的DLL,您不需要在每次发布应用程序时进行额外的部署或检查每个部署。
答案 4 :(得分:0)
二进制文件:
来源:
最后一点通常很重要,所以即使您只使用二进制文件,也要准备好在IDE中下载和打开源代码,特别是如果您使用的库是年轻或经过严格测试的。
答案 5 :(得分:0)
Occam的剃刀说如果你不需要修改库,就应该使用二进制文件。