经典问题,vs编译时引用项目是否比引用dll文件慢??

cannel 2014-03-21 10:47:39
一个存在很久的问题,终于决定要解决他

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

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

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

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

引用项目应该能使逻辑更清晰,但是否真的会拖慢编译速度,请各位高手指教,谢谢!!
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengnan2012 2014-03-21
  • 打赏
  • 举报
回复
一个解决方案下面,自己写的还是引用项目吧
国士_枫 2014-03-21
  • 打赏
  • 举报
回复
外部插件引用DLL,内部肯定引用项目啊
黑子大哥 2014-03-21
  • 打赏
  • 举报
回复
这也有区别?引用项目实际上就是引用的项目下的.DLL啊,和你直接引用dll有区别吗? 引用dll只需要编译主项目 引用项目,当你生成主项目的时候,vs会去将引用的项目编译一次,然后将其生成的dll copy到主项目bin下,自然编译要慢点 倘若你觉得你引用的项目不需要修改了,你完全可以在项目工程配置里面修改,启动的时候不编译引用项目,自然就快了
cannel 2014-03-21
  • 打赏
  • 举报
回复
引用 1 楼 dongxinxi 的回复:
一直都用的引用项目,避免出现代码不同步的问题(明明代码改了,运行结果就是不变,然后你又回去看代码) 当然,你可以设置被引用项目的输出路径至指定目录,exe引用此目录里的dll 但是会出现“偶尔出现某个dll被锁住或者不存在,此时要重新生成甚至重启vs”,暂时没找到什么好方法
我也是这想法,宁愿编译慢点,也不想出现意外情况
  • 打赏
  • 举报
回复
一直都用的引用项目,避免出现代码不同步的问题(明明代码改了,运行结果就是不变,然后你又回去看代码) 当然,你可以设置被引用项目的输出路径至指定目录,exe引用此目录里的dll 但是会出现“偶尔出现某个dll被锁住或者不存在,此时要重新生成甚至重启vs”,暂时没找到什么好方法
cannel 2014-03-21
  • 打赏
  • 举报
回复
引用 6 楼 btman52 的回复:
首先,vs编译本质是调用csc编译,一次只能编译一个项目并生成类库/可执行文件 引用项目=vs判断依赖顺序->编译依赖项->根据依赖项生成的dll编译其他项->重复以上三步->编译完成 引用dll=vs顺序编译 无论哪种,只要是编译整个解决方案,编译的代码总数相同,耗时基本一样。vs判断顺序消耗可忽略不计。 如果解决方案中有大部分不需要更新的库,将这些库移出并创建为新的解决方案更好。当前项目引用编译好的库可以极大减少每次编译的耗时。
感谢回复
btman52 2014-03-21
  • 打赏
  • 举报
回复
首先,vs编译本质是调用csc编译,一次只能编译一个项目并生成类库/可执行文件 引用项目=vs判断依赖顺序->编译依赖项->根据依赖项生成的dll编译其他项->重复以上三步->编译完成 引用dll=vs顺序编译 无论哪种,只要是编译整个解决方案,编译的代码总数相同,耗时基本一样。vs判断顺序消耗可忽略不计。 如果解决方案中有大部分不需要更新的库,将这些库移出并创建为新的解决方案更好。当前项目引用编译好的库可以极大减少每次编译的耗时。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧