2008-12-17 70 views
18

我有一個CommonUtils庫我已經內置到一個dll中,我從幾個我的項目中引用文件。 CommonUtils依賴於在建立CommonUtils.dll時設置爲文件引用的log4net.dll和copy-local = true。 log4net.dll和CommonUtils.dll不在GAC中。引用的依賴關係不復制到輸出目錄

在MyWorkingProject中一切正常,我只有CommonUtils.dll文件引用 - log4net.dll顯示在輸出目錄中(因爲它是CommonUtils.dll的依賴項,但未從MyWorkingProject引用)。 但是,如果我創建一個新的項目添加一些unittests:MyWorkingProjectTest和項目引用MyWorkingProject,然後文件引用CommonUtils.dll再次在這裏(我想使用一些CommonUtils)然後建立log4net.dll這是一個依賴於項目引用和文件引用中也不會複製到輸出目錄。

任何人都可以澄清這裏發生了什麼?編譯器不知道應該抓取哪個log4net.dll文件?有什麼我在這裏做錯了嗎?我應該以其他方式執行此操作以使log4net.dll明確複製嗎? 是否有任何意義,我必須明確引用log4net呢?

回答

1

我相信如果您不在項目中添加log4net作爲參考,它將不會被複制。

+0

如何將log4net添加爲項目引用,因爲我只有分佈式二進制dll。此外,爲什麼我必須添加一個引用,因爲它只是我的一個引用的依賴關係。有人說你不應該在代碼中引用你沒有明確使用的庫。 – Fadeproof 2008-12-18 09:26:00

+0

我的意思不是在項目中作爲「項目參考」而是「參考」。 – user7116 2008-12-18 18:27:21

0

當我以前遇到類似的情況時,我收到了Visual Studio中的一個編譯器警告,告訴我需要添加對從屬庫的引用。

編譯時是否收到這樣的警告?如果是這樣,請遵循它提供的建議,並且應該將Log4net複製到您的輸出目錄。

+0

問題是我有兩個引用對log4net有依賴關係,並且似乎有一些內建的東西讓Visual Studio不復制衝突的依賴關係(儘管它是相同的)。如果我只引用1,但一切都按預期工作,但如果我引用兩者,則不會複製。 ? – Fadeproof 2008-12-18 09:23:58

2

這是設計。您需要考慮引用的自動繼承會導致的含義。雖然您可以邏輯地查看引用應該是什麼,但編譯器沒有這樣的描述。理論上講,如果它走遍了整個依賴樹,你最終可能會複製框架和操作系統的很大一部分。

這絕對是一種痛苦,我同意並理解你的挫敗感,但我認爲微軟無法找到合適的方法來做到這一點。