在Visual Studio 2012中强制重建项目依赖项

时间:2012-10-25 14:24:29

标签: visual-studio msbuild visual-studio-2012

我最近升级到VS.NET 2012,在调试时我开始遇到一个非常令人沮丧的问题。

项目A有项目B的项目引用。当我编辑项目B时,我希望构建/调试项目A的操作能够检测项目B中的更改并在项目A的构建期间自动包含它。(这是有点关注项目依赖性。)这正是VS 2010中曾经发生过的事情。

但这不会发生在2012年。事实上,即使我明确地构建了项目B,项目A也不会接受这种改变,除非我重建项目A.

所以现在我被迫显式构建项目B然后返回到项目A并明确重建它以便包含项目B中的修改。

思想?

5 个答案:

答案 0 :(得分:6)

您是否在解决方案中设置了依赖项目?

我们可以通过以下方式设置它们:

右键单击解决方案 - >属性 - >项目依赖项

顺便说一下,您是在Visual Studio IDE中还是通过msbuild命令构建解决方案?

如果使用msbuild构建项目,则应在项目文件中添加DependsOnTargets属性。

您可以参考的更多信息:

http://msdn.microsoft.com/en-us/library/ms366724.aspx

答案 1 :(得分:3)

您的第3段似乎表明对依赖关系的工作方式存在误解。如果我弄错了,请原谅我。

如果项目A依赖于项目B,则构建项目B不会强制重建项目A.但是,建筑项目A应检查项目B中的更改并在需要时自动重建B.

在这种情况下,项目A是父项目或根项目。构建父项将检查它所依赖的所有项目,并在它们过期时重建它们。始终构建父级会首先自动构建过时的依赖项,然后构建父项目,从而获取依赖项中的任何新更改。

A
 \
  B
  |\
  C D

在这个例子中,如果B有依赖关系,那么它们也会被构建。如果你明确地构建了B,它的依赖关系C和D将被检查并重建,但不是A。

如果你明确地建造了A,那么首先要检查并重建C和D,然后重建,然后是B,最后是A。

答案 2 :(得分:1)

之前我遇到过类似的问题,原因是A对B的引用是对DLL文件的常规引用,而不是“项目引用”。这种情况肯定会解释你所看到的行为。

要进行检查,请在文本编辑器中查看ProjectA.csproj,然后检查所有<Reference><ProjectReference>元素,以确保它们符合您的预期。

答案 3 :(得分:0)

我认为您正在寻找持续集成(CI)服务器。可以将CI配置为监视源存储库,并在将新更改提交到代码库时触发以构建目标程序集。

否则,正如其他人所提到的,项目依赖项可用于重建引用的程序集。

答案 4 :(得分:0)

一个可能的原因是锁定了.suo文件。请参阅我对这个问题的回答:

Visual Studio 2012 not building dependent projects