如何拆分 Visual Studio 解决方案?

2024-04-01

我有一个 Visual Studio 2008 解决方案,其中包含超过 40 个相互依赖的 C# 和 C++/CLI 项目。使用该解决方案的速度非常慢,通常我一次只需要几个项目。因此我决定将解决方案拆分为包含 3-5 个项目的多个解决方案。我还想保留所有项目的“完整”解决方案(它对于自动构建或影响所有项目的大型重构操作很方便)。(这是这里的主要条件。否则,当然,将项目拆分为解决方案是微不足道的。)

有什么办法可以做到这一点吗?

我的第一个想法是创建新的空解决方案,并将一些现有的项目文件添加到每个解决方案中。但如果我这样做,VS 将无法再找到项目引用(因为它们不在同一个解决方案中)。我可以将引用添加为“正常”文件引用。但如果我这样做,我的“完整”解决方案将不再起作用,因为依赖项丢失了。

EDIT:

谢谢大家的答案。我想澄清一下我的问题:我的解决方案包含 44 个项目,不包括测试。所以把它分成 2 部分并不是我真正想要的,我更多地考虑的是 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 解决方案并仅编辑/构建这两个项目。

但我担心我的问题没有优雅的解决方案。 (双关语不是故意的)


您可能需要考虑的另一种方法是仅卸载不使用的项目,只需右键单击并卸载您不使用的项目...这应该会产生更加快捷的 Visual Studio。它保留了 VS 内存中的很多内容。

您可以做的其他事情是编辑构建定义并删除任何未修改的项目(取决于您的链接方式......您知道需要/更新/不需要什么)。

Solution-> 右键单击​​ ->配置管理器-> 取消选中Build在任何不变且不需要的项目上每个构建由于某些其他原因。这可以通过使用这些项目最后一次构建的输出(无论它们将二进制文件转储到何处)来加快构建速度。

Note:您仍然可以右键单击一个项目并构建以更新其输出,然后重建解决方案以获得最新的...您可以执行此操作,而不是来回更改构建配置以包含它。

Update
本着走性能路线的精神(例如,真正等到 VS 2010),您是否采取了其他一些堆栈溢出问题中列出的措施:Visual Studio 上的编译时间非常慢 https://stackoverflow.com/questions/55517/very-slow-compile-times-on-visual-studio and Visual Studio 优化 https://stackoverflow.com/questions/8440/visual-studio-optimizations?这些可以产生很大的影响,并且可以将性能提高到可接受的水平,而我们等待 VS 2010 发货 http://weblogs.asp.net/scottgu/archive/2009/12/17/visual-studio-2010-and-net-4-0-update.aspx.
还有一些可以对性能产生良好影响的事情:

  • I 强烈推荐SSD http://www.codinghorror.com/blog/archives/001304.html如果可以的话。它们成本高昂,但绝对值得,解决方案中的文件越多,回报就越大。当我们在工作中订购新机器时,整个开发团队都选择了 SSD,差异是惊人的。当您处理大型解决方案时,它会旋转驱动器,将物理磁头切换到数千个位置,只是为了读取其中的文件……这就是 SSD 获胜的地方,寻道时间实际上为 0 毫秒。
  • 同样,免费的解决方案是一个很好的碎片整理工具(仅当您使用物理、不要对 SSD 进行碎片整理)会产生很大的差异...如果您使用的东西牢记视觉工作室。我建议MyDefrag http://www.mydefrag.com/(免费软件)因为它的碎片整理本机算法会记住目录结构,因此至少物理驱动器不会花费太多时间来切换解决方案中所需的文件,它们都在磁盘上非常接近。
  • 根据上述 SSD 建议,请记住廉价驱动器和快速驱动器之间的 SSD 性能存在巨大差异,请在此进行一些研究。有了免费实用程序,不用担心您的系统例如 gParted http://gparted.sourceforge.net/您可以非常轻松地移动整个操作系统驱动器,并且您的旧驱动器仍将是备份...只要 SSD 可以容纳 C 上的数据,就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何拆分 Visual Studio 解决方案? 的相关文章

随机推荐

  • Git子树合并策略,可以不合并历史记录吗?

    我一直在尝试摆脱子模块以获得独立的存储库 并且子树合并策略 http help github com subtree merge 似乎符合这个用例 然而 合并的存储库的历史出现在我自己的项目的历史中 这相当烦人 我试过了git filter
  • Vue.js 依赖选择

    我正处于学习 Vue js 的初级阶段 遇到了我现在无法解决的问题 所以我有 1 个选择字段 data list Option 1 size 1 prize 5 size 2 prize 10 然后我像这样填充第一个选择字段
  • WAMPServer 3.2.0:无法访问该站点

    我一直在使用 WAMPServer 来运行 PHP 并且为此使用端口 8181 今天 突然 我无法使用 WAMPServer 访问 localhost 当我尝试打开以下地址的页面时收到此消息 http localhost 8181 无法访问
  • 为什么 Rails 找不到我的资产?

    在生产模式下 rails 似乎无法从资产管道中找到任何预编译资产 我使用的是在 CentOS 上的 RVM 内运行的 Rails 3 2 0 和 ruby 1 9 3 没有其他 Web 服务器与此应用程序一起运行 该应用程序最近才更新为使用
  • 如何在react-dnd-treeview库上使用Selenium测试拖放

    我正在尝试在 React 应用程序上测试简单的拖放行为 我正在使用反应 dnd 树视图 https github com teleport react dnd treeview图书馆和他们的示例网站 http teleport github
  • PHP - 自我表单提交:$_SERVER['PHP_SELF'] OR action=""?

    我只是意识到 在一些奇怪的情况下 我正在做我认为是自我提交的事情 而没有在操作表单属性上引用 PHP SELF 我很困惑 我们可以使用 Or action 如果不是 在什么情况下我们应该考虑其中一种或另一种 提前致谢 模模 您可以使用 PH
  • d3 力图:粘性节点

    我想在 D3 中的力导向图形布局中添加一种行为 一旦放下 拖放的 svg 节点就会粘在其位置上 无论图形中发生什么情况 都不再改变位置 我已经阅读了一些有关此 API 的内容 但我无法找到一种方法来使其正常工作 我试图解决的问题是允许用户
  • 使用 dplyr 进行汇总并保持相同的变量名

    我发现 data table 和 dplyr 在尝试做同样的事情时有不同的结果 我想使用 dplyr 语法 但让它以 data table 的方式进行计算 用例是我想将小计添加到表中 为此 我需要对每个变量进行一些聚合 但然后保留相同的变量
  • 如何从 bash 执行 mongo 命令?

    我正在尝试从 bash 脚本运行此命令 mongo 192 168 10 20 27000 eval use admin db shutdownServer quit 但我收到此错误 rs initiate use admin db shu
  • 从选择的结果创建插入脚本

    使用 SQL Server Management Studio 有一种方法可以在选择结果网格中选择一行或多行 并让 SQL Server Mangement Studio 生成一个或多个插入语句 每选择一行一个 该语句会将该数据插入到表中相
  • libuv 只是 POSIX 系统上 libev 的包装吗?

    我真的很困惑 libev 和 libuv libuv 只是 POSIX 系统上 libev 的包装吗 如果不是的话区别在哪里 不再 从 libuv v0 9 开始 这是libuv github问题 https github com joye
  • 访问 VBA:如何获取表单中的输入并在查询中使用它们

    HI 我有一个带有几个按钮的表单 每个按钮运行几行代码 代码中也有查询 例如 select from table where number 6 现在 如果我想在表单中输入数字 我该怎么做 在按钮附近添加一个未绑定的文本控件 更新您的按钮代码
  • 如何在 R 中使用神经网络包时实现自己的误差函数?

    我正在尝试在 R 中的神经网络包中实现自定义错误函数 通常使用代表误差平方和和交叉熵的 sse 和 ce 来计算误差 任何人都可以向我提供有关如何实现自己的误差函数的详细信息 虽然软件包说我们可以使用自定义的错误函数 但用户手册中没有对此提
  • 有没有办法判断 Safari 是否全屏? (例如 document.fullscreenElement)

    我正在尝试使用 Javascript 确定 Safari 是否处于全屏模式 Chrome 和 Mozilla 都使用带有供应商前缀的 document fullscreenElement 版本 isFullscreen function r
  • 单击 Firebase 动态链接后 - DynamicLinks.dynamicLinks().handleUniversalLink 返回 false

    我正在使用 Firebase 动态链接 并且在 Firebase 控制台中创建的链接很少 这是我复制粘贴到电子邮件并单击的示例短链接 https app xxx com deeplink xyz https app xxx com deep
  • 对象跟随鼠标光标

    我正在做一个Wpf应用程序 我创建了一个眼睛形状的控件 我在画布中放置了一个椭圆 眼睛 我的目的是当鼠标光标进入画布时 椭圆跟随鼠标光标 您对如何执行此任务有什么建议吗 非常感谢您的关注 Cheers EDIT 我已经更新了 Xaml 中的
  • 创建特定大小的零向量

    我想初始化一个具有在运行时确定的特定大小的零向量 在 C 语言中 它会是这样的 int main void uint size get uchar int A size size memset A 0 size size sizeof in
  • C++/CLI pin_ptr

    是 C CLI 的pin ptr http msdn microsoft com en us library 1dz8byfh 28v vs 80 29 aspx相当于C 的固定陈述 http msdn microsoft com en u
  • 警告:错误的管道:没有元素“x264enc”

    过去几天我一直在努力让它运行 我有一个需要 x264enc 的 gstreamer 命令 我正在运行一个Mac我似乎无法安装 x264 开发库 我已经安装了gst plugins bad但这没有帮助 我在论坛中读到 在安装之前我需要先安装
  • 如何拆分 Visual Studio 解决方案?

    我有一个 Visual Studio 2008 解决方案 其中包含超过 40 个相互依赖的 C 和 C CLI 项目 使用该解决方案的速度非常慢 通常我一次只需要几个项目 因此我决定将解决方案拆分为包含 3 5 个项目的多个解决方案 我还想