日期:2014-05-16  浏览次数:21008 次

经典问题,vs编译时引用项目是否比引用dll文件慢??
一个存在很久的问题,终于决定要解决他

vs中,一个解决方案有n个dll类型项目和一个exe可执行主程序项目,后者引用前者,dll间也存在引用

为提高编译速度,民间有一种偏方,引用dll项目生产的dll文件,而不是引用项目

但这带来一个问题,vs解决方案有个 项目生成顺序,是通过项目引用算出来的,被引用的项目先生成,引用别人的在后。但如果引用dll文件,vs就不知道项目的引用关系,也算不出项目生成顺序。在实际使用中,偶尔出现某个dll被锁住或者不存在,此时要重新生成甚至重启vs,于是就有此问题

另外引用dll文件的好处——提高编译速度,我感觉不到有不同

引用项目应该能使逻辑更清晰,但是否真的会拖慢编译速度,请各位高手指教,谢谢!!
------解决方案--------------------
一直都用的引用项目,避免出现代码不同步的问题(明明代码改了,运行结果就是不变,然后你又回去看代码)
当然,你可以设置被引用项目的输出路径至指定目录,exe引用此目录里的dll
但是会出现“偶尔出现某个dll被锁住或者不存在,此时要重新生成甚至重启vs”,暂时没找到什么好方法
------解决方案--------------------
首先,vs编译本质是调用csc编译,一次只能编译一个项目并生成类库/可执行文件
引用项目=vs判断依赖顺序->编译依赖项->根据依赖项生成的dll编译其他项->重复以上三步->编译完成
引用dll=vs顺序编译
无论哪种,只要是编译整个解决方案,编译的代码总数相同,耗时基本一样。vs判断顺序消耗可忽略不计。
如果解决方案中有大部分不需要更新的库,将这些库移出并创建为新的解决方案更好。当前项目引用编译好的库可以极大减少每次编译的耗时。