在项目中使用开源库(例如SharpPcap或FakeItEasy)时,我们应该将源代码添加到解决方案中,还是针对DLL进行编译并将它们放入解决方案中的目录中?使用开源库时,我们应该针对源代码还是二进制文件进行编译?
回答
我想既不。
以下是原因不不把源代码:
- 开发人员可能修改代码不慎
- 库通常如有更改
而且有2个原因DO包含解决方案的DLL:
- 使部署更容易
- 降低使用库的不兼容版本
- 减少丢失的参照
所以,机会如何的可能性有多大?
添加一个新的
Class Library
项目一个独特的名字,说ClassLibrary1
,在Build Events
页的解决方案在
Build
页面的项目设置,配置Output path
应用输出路径,请将以下行添加到
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,因此每次释放应用程序时都不需要额外部署或检查每个部署。
我想说的是,如果您在最新版本中获得它,则可能会使用所提供的二进制文件,因为源代码可能不稳定。但是如果他们提供版本化的二进制文件,那么他们很可能已经过测试并且很稳定。
这也取决于您是否刚开箱即用或是否要修改它。
二进制文件:
- 更稳定,除非你是铭记拉源
- 容易的发布版本的
来源:
- 可以修改
- 可以调试通过直接进入源代码来使用API
最后一点往往是重要的,所以要准备下载并在你的IDE打开源,即使你开始时只有二进制文件,特别是如果你正在使用的库是年轻或虐待测试。
通常我会针对二进制文件进行编译。我在我的解决方案上有一个文件夹供应商/库,或者我只使用NuGet,并编译Againest Dll。
但是,有时我需要调试开源库,当某些事情没有按预期发生时。就在那时,我将链接到源代码(仅用于调试)。
在生产时,我使用二进制文件,因为代码已经过很好的测试。
您应该使用二进制文件进行编译。
原因很简单:您的项目和第三方库是不同的项目,并且在您自己的构建过程中编译他人的库可能会引入不必要的复杂性和项目依赖性。
某些库要求您在环境中安装一些工具和插件。
代替包括在构建过程的开放源代码,通常我有一个依赖性或与二进制文件和源代码都在Visual Studio溶液的根LIB目录。当我想调试第三方代码时,我只需打开另一个Visual Studio实例,然后将调试器附加到整个过程中。
认为一些第三方开源库很胖,也许你自己的代码库很小:因为你添加了很多源代码,你的构建过程会延迟很多,因为你只是添加了无用的东西(代码,插件....)。
我更喜欢将构建过程委托给库的作者的原则,在我的情况下,我认为自己是这样的库的使用者:我不需要每次重新编译它。
啊,如果你打算修改源代码,最好的做法应该是联系作者并发送给他/她补丁,以便他/她可以将其包含在官方发行版中。如果没有,你知道:每次笔者发布一个新版本,你必须合并与自己的变化,新的源代码的额外工作...
奥卡姆的剃须刀说,如果你不需要修改库,你应该使用二进制文件。
- 1. 对于二进制文件,我应该使用bfiles还是bigfiles?
- 2. gdb:使用-g编译的二进制文件与使用-g编译的二进制编译的代码
- 3. 从源代码编译时2.0播放二进制文件在哪里?
- 4. 使用vs2008编译的源代码产生的二进制文件不同于源代码在csc中直接编译的源代码
- 5. Cuda Source使用Rose编译器进行源代码翻译
- 6. BrowserStackLocal:从源代码运行BrowserStackLocal二进制文件
- 7. 编译二进制文件
- 8. django二进制(无源代码)部署
- 9. 嵌入二进制源代码
- 10. 如何将资源编译到二进制文件中?
- 11. 网站源代码控制和大设置二进制文件
- 12. 我们应该开源吗?
- 13. php的二进制代码(编译php)
- 14. 针对Windows x64的预编译的SQLite二进制文件
- 15. 我该如何使用OpenCV源代码进行调试
- 16. 对开源项目的二进制文件签名
- 17. 替代针对weblogic.jar进行编译?
- 18. 在GCC调试二进制文件中的源代码位置
- 19. 二进制文件源代码管理系统
- 20. Julia BinDeps:源代码和二进制文件之间的区别
- 21. 应开放源代码库进行数字签名
- 22. 我如何检查编译的二进制文件是32位还是64位?
- 23. 我应该使用Xamarin还是QT进行移动开发?
- 24. GCC编译的二进制文件给予 “不能执行二进制文件”
- 25. g ++编译的二进制文件给“不能执行二进制文件”
- 26. 编译ADB源生成亚行二进制
- 27. 进入源代码控制
- 28. 我应该使用什么库进行base64编码/解码
- 29. 对文件和文件夹进行特定限制的源代码控制
- 30. 我应该使用C++还是脚本进行守护进程?
如果您不打算更改库源代码,请直接使用该DLL。 – 2013-02-24 11:17:17