2014-01-08 34 views
14

对于不太清楚的标题,我很抱歉。Visual Studio是否优化传递引用?

我在Visual Studio(2010)中遇到了一个奇怪的行为。

比方说,我在我的解决方案三个项目:A,B和C

A has a reference on B 

B has a reference on C 

C has a reference on an assembly (log4net.dll) 

所有这一切,被配置为复制本地真

我负责的项目A和另外两个开发人员负责项目B和C.

项目B是使用位于项目下,在其类中的一个数(静态)方法。我正在使用B中没有使用任何C的其他类。

当我构建解决方案(项目A配置为主项目)时,我期望看到C及其引用程序集的结果输出文件夹的项目A.实际发生的是,C的结果被复制到B的输出文件夹,但没有出现在A的输出文件夹中。

我花了一些时间才弄清楚此原因A没有使用任何来自C(直接或间接)的东西。

所以问题是:它是一个内置的Visual Studio的优化功能还是我做错了什么?

+0

是的,MSBuild绝对知道如何做到这一点。许多程序员拥有10个以上项目的解决方案,如果该功能无法正常工作,他们的工作会非常悲惨。您的问题中的信息没有给出任何提示,可能是错误的,请将MSBuild详细程度更改为“诊断”以获取详细的跟踪。由于您刚刚开始将这些项目合并在一起,实际上并不使用*参考是简单的解释。 –

+0

@HansPassant:许多程序员确实拥有10个以上项目的解决方案,但这并不意味着他们中的一个会引用显式引用链中的所有其他项目。 –

+0

这正是当然的要点。如果这些链条存在很容易,他们几乎从不以真正的解决方案做。但一切仍然正确复制。 –

回答

2

是的,这是一项功能。如果您不使用引用程序集中的任何类型,则不会被复制。

+2

此处的解决方案可以是更改项目的属性,以便所有项目都使用相同的文件夹进行输出。 – Richard

+0

嗨,谢谢!你有什么参考?我可以禁用此行为吗? – Michael

+2

@Michael http://blog.alexyakunin.com/2009/09/making-msbuild-visual-studio-to.html –