在Visual Studio 2012中被迫重建项目依赖关系

7
我最近升级到VS.NET 2012,调试时遇到了一个非常令人沮丧的问题。
A项目中有一个对B项目的引用。当我编辑B项目时,我期望在构建/调试A项目时能够自动检测到B项目的更改并自动包含在A项目的构建中。(这是项目依赖性的一种表现)。而在VS 2010中,这正是会发生的。
但在2012中,这并没有发生。即使我显式地构建B项目,A项目也不会在构建时读取这些更改,除非我重新构建A项目。
所以现在我被迫显式地构建B项目,然后返回A项目并显式地重新构建它,以便将B项目中的修改包含进来。
你有什么想法吗?

这些是什么类型的项目?哪种更改会出现这个问题?(例如,当您编辑B项目时,是否实际上对其进行了需要重建A的更改?) - James McNellis
一个是Windows窗体应用程序(项目A),另一个是DLL(项目B)。是的,我正在进行更改(代码更改),这应该会强制在项目A上进行构建。 - RMD
5个回答

6

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

我们可以从以下位置进行设置:

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

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

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

更多信息,请参考:

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


我正在使用Visual Studio 2012。项目A依赖于项目B。这是由VS.NET自动设置的,我只是进行了双重检查。 - RMD

3

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

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

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

A
 \
  B
  |\
  C D

在这个例子中,如果B有依赖项,它们也会被构建。如果您明确地构建了B,则会检查并重新构建其依赖项C和D,但不包括A。
如果您明确地构建了A,则首先检查并重新构建必要的C和D,然后是B,最后是A。

2
我不认为我有任何误解。就像我所说的,我在项目B中进行更改。然后我构建项目A,但是项目B中的更改并没有被包含进去。我的关于构建/重新构建的观点只是为了说明我当前的解决方法,而不是描述我期望它如何工作。您的解释仍然没有告诉我为什么在我对项目B进行更改后构建项目A不会导致这些更改被包括在内。 - RMD

1
我之前遇到过类似的问题,原因是A对B的引用是普通引用(指向DLL文件),而不是“项目引用”。这种情况可以解释你看到的行为。
要检查,请在文本编辑器中查看ProjectA.csproj,并检查所有和元素,确保它们符合您的预期。

如果这不是问题,那么项目文件有问题或者Visual Studio出现了问题。 - makhdumi

0

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接