单个Visual Studio解决方案中的多个应用程序


17

我正在一家公司工作,该公司希望将所有.Net应用程序(Web应用程序,Windows应用程序和控制台应用程序)整合到一个Visual Studio解决方案中。

我正在从开发人员那里寻找经验,他们要么以这种方式构造自己的应用程序,要么在一家从事此工作的公司工作。这是一个好主意吗?

  • 将您的所有应用程序放在一个解决方案中,而不是为每个应用程序使用单独的解决方案,优点/缺点是什么?

  • 带有20多个项目的解决方案的Visual Studio有多快?

  • 具有源代码控制的并发开发的解决方案文件的稳定性如何?


请记住,答案可能特定于Visual Studio的特定版本。
stakx

Answers:


21

最近,我们将公司中几乎所有的源代码迁移到一个解决方案中。

为什么?

最初,我们有数十种解决方案。解决方案中的某些项目重用了另一个项目中的项目,没有人关心使用软件包管理器。在您大幅更改几乎在所有地方使用的项目的那一天,预计在接下来的几天或几周内,整个公司的工作将损失数小时。最糟糕的是,您甚至不知道更改将对什么产生确切影响。

将所有代码合并到一个解决方案中是一种替代方法。目前它运行良好,并且依赖关系现在很容易理解。是否要修改方法,还要跟踪此更改可能在代码库中的任何地方产生的影响?Visual Studio可以轻松做到这一点。对我来说,这是成功的。

持续集成现在也变得更加容易。一种编译和部署的解决方案。几乎没有什么可配置的。

它可扩展吗?

在性能方面,Visual Studio使我感到非常惊讶。我认为它将开始提出一个包含50个项目的解决方案。今天,有200多个项目。Visual Studio似乎具有足够的可伸缩性来管理它们,就好像它们只有20个一样。是的,有些事情需要时间。如果您重新编译每个项目,并且具有代码合同,默认情况下启用了代码分析等,则可能需要一段时间。但是没有人期望编译200个项目像10个一样快,而且顺便说一句,您不应该:这是Continuous Integration Server的角色。启动时间(冷启动,然后加载解决方案)非常;也许没有10个项目的速度快,但是仍然可以接受(在五年多以前购买的机器上,不到20秒)。

更进一步,系统地卸载项目是一个好主意(当将项目组织在解决方案中的目录中时,这确实很容易)。如果某人从事仅需要加载三个项目的工作,则无需加载所有200个项目(当然,除非依赖关系可能受到影响)。

版本控制也可以按预期工作(如果重要,我正在使用SVN服务器)。我没有在真正的并发环境中工作,例如,数十名开发人员经常提交代码,但是我可以想象这不会有太多问题。只是要注意许多开发人员同时添加新项目的情况:合并.sln文件不是最容易的事情。

结论

如果我不得不再次做出决定:

  1. 我仍然会将所有内容迁移到一个解决方案中。这极大地减少了破坏依赖关系的痛苦,仅此一项好处就完全值得。将所有代码集中放置也是一个好主意。例如,这使得在Visual Studio中搜索内容成为可能。我还可以处理两个弱相关的项目,但仍然只打开了一个Visual Studio窗口。

  2. 我还将研究更多的NuGet以及托管私有NuGet服务器的能力。当您不想将几个项目合并到通用解决方案中时,通过NuGet管理依赖项可以解决一些问题。就个人而言,我没有这种情况,但我想其他公司可能会有。

  3. 最后,为每个开发人员投资SSD都可以带来很大的不同。但是您不需要,在我的情况下,代码库仍存储在普通硬盘上。


2
仅供参考:在速度/性能方面存在问题时,您也可以通过VS中的.csproj文件打开项目。NuGet“专用服务器”只是一个网络文件夹(并将该文件夹添加为VS中的程序包源位置)-只需将nupkg文件放在此处即可使用。
史蒂文·埃弗斯

感谢MainMa通过一个解决方案设置分享您的经验;一个非常详细且有用的答案。我对将所有应用程序整合到一个解决方案中的保留意见是,必须让初级开发人员可以访问所有内容。我们使用Ankhsvn,我希望为初级开发人员提供我希望他们使用的单个应用程序的URL,而不是让他们访问所有内容。有什么想法吗?
2013年

@BruceHill:使用SVN,您可以精确配置谁可以访问什么。初级开发人员仍然可以看到每个根目录(请参阅我的Server Fault问题),但将无法访问受限制的项目。
阿森尼·穆尔琴科

2
我为一些拥有大型开发人员团队且每天提交代码的大型公司工作,我可以告诉您单一解决方案方法不起作用。每个项目都是开销。加载,构建和上帝知道某人可能已附加到上述项目的构建前/构建后步骤。现在,拥有庞大的开发人员团队,您将每天在许多这些项目中进行更改。每次签入时都包括运行中的单元测试等,以实现持续集成,那么您将有更多开销。每个可部署部门(服务,网站)只有一个解决方案,并使用像NuGet这样的软件包管理器。
永远学习

8

这是预期的用法。

将您的所有应用程序放在一个解决方案中,而不是为每个应用程序使用单独的解决方案,优点/缺点是什么?

  • 优点:
    • 项目之间的简易参考
    • 更容易调试/逐步执行
    • 易于附加到进程(即,您正在逐步通过Windows服务,当它跳到共享库代码时,它就可以工作了,因为所有符号都已经加载并说明了)
    • 在ide中进行代码搜索效果更好(您不必知道要查找的代码位于哪个项目中)
    • 跨项目变更列表更易于管理(即,您更改了库代码,因此您必须使用1个签入位同时更新客户端代码)
  • 缺点:
    • 生成速度:如果您习惯“全部重建”,则构建会花费更长的时间。时间更长了,增量构建有时会有时髦的行为。
    • ide速度:下一个

带有20多个项目的解决方案的Visual Studio有多快?

拥有20多个项目……可能还不错。我在没有VS问题的情况下看到了更多内容。非常稳定/快速。但是...如果有问题,可以缓解:在VS中打开.csproj,然后从那里开始工作。您无法获得将所有功能都集成在一个解决方案中的好处,但是您始终可以在需要时重新打开sln,并在需要时仅使用.csproj进行操作(就像您现在所做的那样)。

具有源代码控制的并发开发的解决方案文件的稳定性如何?

解决方案文件仅在您添加/删除项目或解决方案级别的对象时更改,因此很少更改。它是xml,因此您可以查看其中的内容。他们很少改变。


史蒂夫,您说过“这是预期的用法。” 您可以为此提供参考吗?谢谢!
改革了
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.