2014-01-08 68 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 –