2009-06-12 73 views
6

重複 - 這個確切的問題被問到here - 唯一的解決方案似乎是後構建事件。Visual studio遞歸複製本地

在Visual Studio 2008中,我有以下項目:

  • A - 引用乙

  • 乙 - 引用Lib.dll

;當B建成後,庫.dll出現在B/bin/Debug中。 (這是可以的)

當A被構建時,B.dll出現在A/bin/Debug中,但Lib.dll不會出現在A/bin/Debug中。

因爲B在運行時需要這些程序集,所以將所有B的依賴項都複製到A的輸出路徑不是合乎邏輯的行爲嗎?

所有參考文獻都有copylocal = true。


(現在我必須手工引用所有B的依賴關係,從A,是正確的?我還可以使用自定義生成步驟,我猜。反正,這是否行爲有什麼好處/意義嗎?)

+0

您正在使用什麼版本的vof visual studio? – 2009-06-12 20:57:46

+0

我正在使用VS 2008.我相信它在2005/2010年的行爲方式也是如此。 – 2009-12-27 17:44:17

回答

5

這隻有在程序集實際上由.dll引用時纔有效。即如果您有LibInterface.dll和LibImplementation.dll - 並且A中的代碼僅引用LibInterface.dll中的類,則無法將LibImplentation.dll放入B(乾淨地)的輸出中。

這也適用於任何仲裁文件 - 也就是說,如果您有與項目A相關的Randon.myFile,這將是所需的程序: 1.作爲複製本地或添加項目A的事件添加(所以輪到A) 2.在項目B中,在項目A ref上設置「copy local」。 3.然後,您應該在項目B中的項目A的輸出(包括您的文件)中獲取所有內容 - 但您不需要。

可能有其他一些選項 - 「複製本地 - 全部」或其他。這將有助於VS支持國際奧委會的技術和清晰的抽象。

0

我已經多次完成相同的過程,並且不需要手動重新引用程序集。一個簡單的方法來測試是這樣的:所述的

    1. 參考B選自B在A中
    2. 編譯創建對象的實例。

    如果構建成功完成,那麼一切都被引用OK。

  • 0

    如果Lib.dll是一個互操作的DLL,那麼它的底層DLL將不會被複制。除此之外,我會說有可能是操作員錯誤,因爲你絕對不需要手動引用相關的託管程序集。