簡體   English   中英

為什么本機DLL不會復制到輸出目錄

[英]Why the native DLL is not copied to the output directory

我有一個C#項目A,它使用.net包裝器DLL和本機DLL。 我將.net包裝器DLL添加到項目A的引用列表中。由於包裝器DLL僅在本機DLL處於同一文件夾時使用,因此應將本機DLL復制到項目A的輸出目錄中。我實現了這一點通過將本機DLL添加為項目A下的內容文件,並將其復制操作設置為在較新時復制。 這可以。

如果C#項目B直接引用項目A,VS會將項目A使用的所有相關文件復制到項目B的輸出目錄。這意味着包裝器DLL和本機DLL也將復制到項目B的輸出目錄中。 這也很好。

然后我還有另一個C#項目C,它只直接引用項目B,而不是項目A.有趣的是,VS不會將本機DLL復制到項目C的輸出目錄,否則我打算這樣做當項目C使用項目B的功能並查找本機DLL以使用包裝器DLL時,它將找不到它。

有人可以解釋為什么VS不將本機DLL復制到項目C的輸出目錄中? 在VS中復制依賴鏈的文件的機制是什么? 非常感謝。

基本上參考鏈不會傳播,並且由最頂層的程序集(exe,web站點等)來確保它具有所需的一切,無論是本地還是(例如使用托管dll)GAC。 您需要將文件作為“復制到輸出”添加到exe / web站點。

為什么不在項目A中添加本機dll作為參考? 這將確保在其他庫使用A時始終包含它。

編輯:沒關系,這只適用於dll是COM或.NET組件的情況。

由於項目中沒有明確的依賴項,因此構建器不知道需要使用已知二進制文件輸出那些依賴項。 您可以做的是創建一個構建后配置,以便在編譯時將這些DLL復制到構建目標。 你可以谷歌如何做到這一點 ,這是第一個解釋如何做到這一點的結果之一:

http://visualstudiohacks.com/articles/general/customize-your-project-build-process/

暫無
暫無

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

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