[英]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
上設置CopyLocal
, B
及其依賴項C
都將被復制到A
的輸出文件夾中。
請注意,如果您構建B
,則C
不會復制到B
的輸出文件夾。
如果希望將B
復制到A
的輸出文件夾,但又不想在C
上發生相同的情況,則一種解決方案是將C
放入GAC。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.