2008-11-26 83 views
44

我想知道什麼copy-local = true參考確切地做。它是否將引用的程序集及其所有依賴項複製到輸出目錄?複製本地如何工作? log4net.dll沒有被複制到MyProject輸出目錄

我的場景如下: 我有一個使用log4net的自定義日誌包裝。我構建了一個發佈程序集MyLogWrapper.dll,並將log4net.dll參考設置爲copy-local true。從MyProject中引用MyLogWrapper.dll並將copy local設置爲true應該會導致log4net.dll被複制到正確的位置?我只在MyProject中引用MyLogWrapper.dll及其依賴關係。 log4net.dll未被複制到MyProject輸出目錄,但MyLogWrapper的所有其他依賴項都是。可能是什麼問題呢?

我做了一些更多的實驗,似乎如果我從GAC中刪除程序集(log4net.dll),它開始在本地複製。任何人都可以證實這是問題嗎?

回答

4

當本地副本設置爲true時,它將複製屬性本地副本= tue的所有組件到應用程序的bin目錄。

在你的情況下,DLL可能會使用其他的DLL,所以它也需要。

+8

...除了GAC中的那些。 – JustAMartin 2012-06-01 08:25:16

+0

如果項目被另一個項目引用到另一個項目輸出目錄,那麼即使那些GAC中的項目也與VS 2015一起復制。看到我的答案。 – vezenkov 2015-09-18 08:34:47

5

你需要對本地複製有點謹慎,因爲它已經把我趕出去了!

只是偶爾,對於一個特定的.dll,它會默默無法將其複製到生成文件夾。通常,這不會在開發機器上顯示,因爲dll通常也在GAC中(如果您已經安裝了用於開發的開發工具/庫),所以在獲取distrobuted/bundled之前您不會注意到到安裝程序中,並且客戶端計算機上缺少所需的文件。

這個bug沒有太多的信息,但是這個線程演示了它對於一個特定的庫:here

被這個問題困住了,我認爲這是一個好主意(通常在任何情況下),以確切知道你的項目需要哪些程序集,並有一個腳本或類似的自動化操作來確保所有必需的組件都存在當你建立,或更有可能當你做一個安裝程序,或收集文件分發,

+0

你是否建議使用vs post-build事件來做到這一點? – Fadeproof 2008-11-26 12:39:16

+0

我沒有使用過它們,所以我不能說是或否。在我的情況下,我有一個NSIS腳本,它爲我正在編寫的工具(一個可視化應用程序)生成安裝程序。 我不是僅僅在安裝程序中包含* .dll,而是更新它以包括每個程序集的名稱,以便在缺少任何程序時提醒我。 – xan 2008-11-26 13:00:40

+0

...續。它也從其他地方找到正確的程序集,如果它丟失了,所以安裝程序代不會失敗,但它警告說VS沒有複製我需要的.dll文件。 – xan 2008-11-26 13:02:07

10

在MSDN here問這個問題 - 似乎這種行爲是設計。 「如果您部署/複製包含對GAC中註冊的自定義組件的引用的應用程序,則無論」本地複製「設置如何,都不會將該組件部署/複製到應用程序中。」

31

不幸的是,根據MSDN documentation中的以下聲明,似乎CopyLocal功能不能像GAC中已有的程序集那樣工作。

如果您部署的應用程序包含對在GAC中註冊的自定義組件的引用,則不管該組件是否使用CopyLocal設置,該組件都不會部署在應用程序中。在以前版本的Visual Studio中,您可以將引用上的CopyLocal屬性設置爲確保已部署該程序集。現在,您必須手動將程序集添加到\ Bin文件夾。這將所有自定義代碼置於審查之中,降低發佈您不熟悉的自定義代碼的風險。

更多信息可以在下面的頁面找到,它解釋了項目引用如何工作的細節。

MSDN: Project References

7

還有一招:重新設置基準複製本地爲false,然後爲true,和Visual Studio爲參考自動添加私人的元數據。至少VS 2010的確如此。我最近這樣做是爲了解決我們的TFS Build服務器的一個問題,由於某些奇怪的原因,GAC中安裝了許多Enterprise Library組件,所以我們在從TFS Drop文件夾部署項目時遇到了主要問題。那個錯誤/真實的竅門救了我們。

0

我發現如果引用的項目具有對GAC程序集的依賴關係,那麼在Visual Studio 2015中不會使用項目引用來尊重這一點。 GAC程序集總是被複制到根項目輸出中,並且僅針對持有對GAC dll的引用的項目輸出來複製local = false。

Connect feedback

相關問題