我有一个Visual 2008解决方案,其中包含>40个C#和C++/CLI项目,它们相互依赖。使用该解决方案很慢,通常一次只需要几个项目。因此,我决定将解决方案分成多个包含3-5个项目的解决方案。I还希望保留所有项目的“完整”解决方案(对于自动构建或影响所有项目的大型重构操作来说,这很方便)。否则,将项目拆分成解决方案当然是微不足道的。)
有什么办法吗?
我的第一个想法是创建新的空解决方案,并将一些现有的项目文件添加到每个解决方案中。但是如果我这样做,VS就找不到项目引用了(因为它们不在同一个解决方案中)。我可以将引用添加为“普通”文件引用。但是如果我这样做,我的“完整”解决方案就不再工作了,因为依赖项已经丢失了。
编辑:
谢谢大家的回答。我想澄清一下我的问题:我的解决方案包含44个项目,不包括测试。所以把它分成两部分并不是我想的那样,我更多的是考虑5-8个部分。这就是为什么我想保持“完整”解决方案,在这里VS可以找到正确的构建顺序为一个完整的构建。手动维护8种不同解决方案的构建顺序(例如在批处理文件中)对我来说似乎容易出错。
另外,我想“从逻辑上”将项目分组(即,我希望将通常在一个解决方案中被修改的项目放在一起)。但是,该分组并不总是与依赖项匹配。例如,假设我有依赖链
A is referenced by B is referenced by C is referenced by D假设A和D经常一起修改,但B和C很少改变。(显然,B使用的A的接口必须保持不变。)那么我希望A和D在一个解中,B和C在另一个解中。但是,如果我想从头开始构建所有项目的话,只有当我有一个完整的包含A、B、C和D的“完整”解决方案时,这才能起作用。一旦构建完成,我可以打开我的A/D解决方案和编辑/构建只有这两个项目。
但我担心我的问题没有优雅的解决办法。(双关无意)
发布于 2010-01-15 05:04:43
没有什么好办法做这件事。这些工具的构建并不是考虑到这一点。相反,您应该尽可能多地将您的项目组合在一起。即使代码数量相同,构建的运行速度也会快很多倍。
您必须克服这样的想法,即要有良好的抽象,就需要单独的项目。这似乎是强制分离的一种非常干净的方式。但是用这个工具链是不值得的。而是使用语言特性;类、命名空间等等。
发布于 2010-01-10 18:48:45
另一种可能需要考虑的方法是,只需卸载未使用的项目,只需右键单击并卸载不工作的项目,on...this就会产生一个更快的Visual。它把很多东西保存在VS的记忆之外。
您可以做的其他事情是编辑构建定义并删除任何未经修改的项目(取决于您如何链接are...you,知道需要/更新/不需要什么)。
解决方案 ->向右单击-> 配置管理器 ->,在任何不更改且由于其他原因不需要每个构建的项目上取消 build 。这将通过使用这些项目的上一次构建的输出来加快构建速度,无论这些项目将二进制文件转储到哪里。
注意:,您仍然可以右键单击一个项目并构建以更新它的输出,然后重新构建解决方案以获得latest...you可以这样做,而不是来回更改构建配置以包括它。
更新
本着遵循性能路线的精神(例如,等到VS 2010真正开始),您是否采取了其他堆栈溢出问题中列出的措施:Visual上编译时间非常慢和Visual优化?这些都会带来很大的不同,并且在我们等待VS 2010装船的时候,性能可能会达到一个可接受的水平。
还有一些可以对性能产生良好影响的因素:
发布于 2010-01-10 18:56:26
您可以创建多个解决方案,并将任何项目添加到您喜欢的每个解决方案中。
您希望构建的项目可能与其他项目有依赖关系。在这种情况下,您需要从使用" project“引用(whch引用解决方案中的任何其他项目)改为使用文件引用(在这里您引用了项目创建的程序集.dll )。
因此,让我们把它们看作是“库”(编译一次,然后大量使用)和“核心”项目(您正在进行大量更改)。制定包含“库”项目的解决方案,并(最好)添加一个构建后步骤,将结果的调试/释放dll复制到共享库文件夹中。将核心项目添加到新的解决方案中。将所有核心解决方案引用更改为通过共享文件夹中预先构建的二进制dll引用库(请参阅release,以便最终版本正常工作)。
如果更改了库,则需要构建库解决方案来重新构建库解决方案,然后使用核心解决方案重新构建依赖于库的应用程序。(因此,在核心解决方案中而不是在库中放置任何频繁更改的代码是一个好主意。当项目成熟时,您可以在以后的某个日期将其移动,并且/或如果需要在一段时间内对核心项目进行大量修改,可以将其转换为核心项目)。
2018年编辑这些天,图书馆可以分发使用当地nuget或npm服务器,这将是一个首选的选择,除非有特定的理由不采用这种方法。
最后一个选项是,如果构建库需要一段时间,而且更改频率很低,那就是让它们“预编译”库--将最终的dll文件签入到源代码管理中,您的团队成员只需获得最新版本,就可以针对库进行构建,而根本不需要为它们获取或构建源代码。(要更新这些库,您必须记住在构建二进制.dll文件之前先签出它们,然后在重新构建它们之后再签入它们,因此您必须权衡它们的优点(更快、更容易构建)和缺点(对库进行更多的修改,在源代码管理中使用更大的二进制文件)。
https://stackoverflow.com/questions/2037985
复制相似问题