2

我有一个包含多个项目的解决方案,其中启动项目有一个构建后事件,该事件执行所有“插件”项目的复制和其他组织任务。将解决方案从 VS 2005 升级到 VS 2008 后,似乎只有在我修改启动项目时才会触发构建后事件,这意味着我更新的插件不会插入到当前的调试会话中。这是有道理的,但它似乎是行为的改变。是否有其他人注意到关于构建哪些项目的行为发生了变化?

有谁知道每当我按下 F5 时我可以用来强制启动项目重建的解决方法?也许我很久以前就将 VS 2005 配置为以这种方式工作,以至于我已经忘记了它......

4

7 回答 7

5

我认为你需要重新组织职责。每个组件都应该对自己负责,因此将其生成的优点复制到需要去的地方。这样,是否/谁/什么/何时/何地建造都无关紧要。无论更新什么,都会将自己放在适当的位置。


IMO 其他建议是不可以的,因为它们会绕过编译器的聪明才智,知道何时需要对主项目进行重建。从而杀死任何编译时间节省。如果您的“插件”项目是程序集(而不仅仅是来自主项目的项目引用),那么您无需在每次重新构建插件时都重新构建主项目。新的程序集将被选入进程/调试器,而没有需要重建的主项目。

于 2008-08-19T06:15:18.667 回答
3

为什么不为每个插件添加一个依赖项到“启动”项目?如果其他任何更改,这将强制重建项目,并且您不必弄乱任何其他构建前/构建后事件。

于 2008-08-19T04:51:16.387 回答
2

我不知道这是否是正确的方法,但您可以在启动项目中添加一个预构建事件(如果它是静态的)以清理将强制重建的项目。

就像是:

devenv project.csproj /clean
于 2008-08-19T04:32:12.243 回答
2

这是一种痛苦。我们真正需要的是让 Microsoft 允许我们加入 Post-Solution Build 事件。您可以通过宏来执行此操作,但这太复杂了。

我假设这是一个 C++ 项目,因为 C# 没有这个问题。

这是我的解决方案,它并不优雅,但它有效:

  • 创建一个新项目,其唯一目的是运行构建后脚本。将其标记为依赖于解决方案中的所有其他项目。
  • 向该项目添加一个名为 dummy.h 的虚拟文件或其他文件。
  • 在解决方案资源管理器中右键单击 dummy.h 并选择属性。
  • 选择“自定义构建步骤”。
  • 对于命令行类型“echo”和输出只需键入“dummy”或其他永远不会存在的东西。

这个项目,以及构建后的脚本,现在将在每个构建上运行。

约翰。

于 2008-08-19T12:12:43.173 回答
1

Flipdoubt:它们是最初在 2008 年创建的项目。如果 C# 不起作用,我的建议是查看“构建事件”选项卡并检查“运行构建后事件:”下拉菜单的设置。如果它设置为“当构建更新项目输出时”,这可能是您的问题,请尝试设置为“成功构建”。

约翰。

于 2008-08-19T12:49:46.250 回答
1

我在这里遇到了同样的问题,这很烦人。John Richardson 是正确的,应该有一个 Post-Solution Build 事件(和一个 Pre-Solution Build 事件)适用于解决方案中的任何项目正在构建的时候。

我认为在当前的 VS 2008 IDE 中没有任何好的解决方法可以得到这个结果。

于 2009-03-06T17:41:35.363 回答
0

从@lomaxx 建议开始,我通过在启动项目的构建后事件末尾添加以下行来获得非常相似的设置:

"$(DevEnvDir)devenv.exe" "$(ProjectPath)" /clean

请注意,这会使启动项目在您下次需要调试时构建,因此您应该确保项目至少构建一次。

PS。我最初按照建议尝试了预构建,但这没有用(我认为这是有道理的——如果 VS 认为一个项目不需要构建,它就不会为该项目执行任何事件)。

于 2010-09-28T16:04:27.823 回答