簡體   English   中英

如何在C#項目中設置“復制本地依賴項” [CopyLocal的問題]

[英]How to set the “Copy Local Dependencies” in C# projects [problem with CopyLocal]

我有一個名為A.dll的程序集,該程序集具有對一個稱為B.dll的程序集的項目引用。 引用為B.dll的程序集具有對C.dll的二進制引用。

A.dll-> B.dll-> C.dll

我在A.dll中將B的“復制本地”設置為true,在B.dll中將C.dll的“復制本地”設置為false。

無論如何,當我構建A.dll時,我都會在結果文件夾中以C.dll結尾。 為什么不將B.dll的“復制本地”值考慮到C.dll?

謝謝

那是因為msbuild 能夠找到 c.dll。 它對B項目的復制本地設置一無所知。 它只是查看b.dll元數據中的.assembly指令,並發現c.dll是一個依賴項。 如果可以找到c.dll,它將對其進行復制。 如果找不到它,那么什么也不會發生,也不會抱怨。

奇怪的是,您的解決方案是c.dll與b.dll存在於同一目錄中。 它是怎么到達那里的? 只是阻止它被復制到那里,它也不會被復制到A構建目錄。 否則,您將如何運行它一直是很模糊的。

這是因為, CopyLocal將引用的程序集及其依賴項復制到輸出文件夾中, 除非引用的程序集或依賴項位於GAC中

由於您在引用的B上設置了CopyLocal ,因此即使您沒有在B項目中的引用C上設置CopyLocalB及其依賴項C都將被復制到A的輸出文件夾中。

請注意,如果您構建B ,則C 不會復制到B的輸出文件夾。

如果希望將B復制到A的輸出文件夾,但又不想在C上發生相同的情況,則一種解決方案是將C放入GAC。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM