2009-11-21 211 views

回答

81

在項目中使用後構建操作,並添加命令以複製有問題的DLL。生成後操作被編寫爲批處理腳本。

輸出目錄可以引用爲$(OutDir)。項目目錄爲$(ProjDir)。嘗試在適用的情況下使用相對路徑,以便可以複製或移動項目文件夾而不會中斷生成後操作。

+18

還值得指出的是,他可以通過Project> Properties> Build Events> Post-Build Event來設置構建後事件。 – 2009-11-21 17:23:41

+0

作品! :) 謝謝! – Mat 2009-11-21 17:27:02

+19

示例:http://eyeung003.blogspot.com/2009/11/visual-studio-post-build-event-to-copy.html – AntonioR 2010-11-09 12:52:47

5

(這個答案只適用於C#不是C++,對不起,我誤解了原來的問題)

我已經通過DLL地獄這樣了之前。我的最終解決方案是將非託管DLL作爲二進制資源存儲在託管DLL中,並在程序啓動時將它們解壓縮到一個臨時文件夾中,並在處置時將其刪除。

應該是.NET或PInvoke的基礎設施的一部分,因爲它是非常有用....它使你的託管DLL易於管理,無論是使用Xcopy的或作爲一個更大的Visual Studio解決方案的項目引用。一旦你這樣做了,你不必擔心後期構建事件。

UPDATE:

我在另一個答案張貼在這裏的代碼https://stackoverflow.com/a/11038376/364818

+0

我同意,它應該是框架的一部分(靜態鏈接dll等等) - 值得注意的是,將dll作爲資源存儲,然後在運行時解壓縮可能會在某些企業環境中引發問題(特別是如果它們具有相當主動的防病毒軟件)。 – BrainSlugs83 2016-06-11 01:39:32

6

在評論部分的細節上面試圖從一個C++項目輸出的dll複製到時並沒有爲我(VS 2013)工作另一個C#項目的釋放和調試文件夾位於相同的解決方案中。

我不得不添加以下後生成作用(右鍵單擊具有.DLL輸出的項目),那麼屬性 - >配置屬性 - >生成事件 - >生成後事件 - >命令行

現在我將這兩行輸出的dll複製到兩個文件夾:

xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Release 
xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Debug 
31

$(OUTDIR)竟然是在VS2013的相對路徑,所以我不得不把它與$結合(PROJECTDIR )以實現期望的效果:

xcopy /y /d "$(ProjectDir)External\*.dll" "$(ProjectDir)$(OutDir)" 

順便說一句,您可以通過在開頭添加'echo'來輕鬆地調試腳本,並在構建輸出窗口中觀察擴展文本。

+11

'$(OutDir)'是我的VS2013社區更新4中的絕對路徑... – 2015-03-03 02:10:26

+0

$(TargetDir)可以替換$(ProjectDir)$(OutDir),因爲它是兩者的組合。 – person27 2017-03-30 00:27:19

+0

在沒有/ d的情況下,它拋出了Access Denied錯誤。但是根據文檔的/ d是針對日期的。不確定連接是什麼。 – 2017-12-18 22:23:18

相關問題