2009-12-30 35 views
9

正確構建託管代碼Visual Studio(並遞歸)將引用的託管項目的dll複製到正在構建的項目的輸出文件夾中。如何獲取Visual Studios構建系統以瞭解託管dll的非託管依賴關係?

但是,如果其中一個引用是依賴於非託管dll的託管DLL,那麼這些非託管dll不會複製到輸出文件夾,即使它們在相同解決方案中的相應項目被列爲託管的依賴關係DLL。

我意識到可以通過讓所有項目使用相同的輸出文件夾來解決此問題。我們已經爲大多數項目做到了這一點,但我們更願意將單元測試輸出文件夾分開,從而導致使用帶有非託管依賴項的託管Dll的單元測試的上述問題。

我們現在使用的解決方案是預生成事件來複制必要的DLL,但這浪費時間並且容易出錯,因爲它需要爲使用託管DLL的每個項目重複。

因此,我想知道是否有辦法讓構建系統瞭解,當它決定複製託管DLL時,它總是應該複製託管DLL的非託管依賴關係?

回答

5

一種解決方法似乎是將另一個節點添加到託管DLL項目中,命名非託管DLL並設置Build Action =「None」,並將Copy複製到Output Directory =「Copy if Newer」。

編輯:對於建立一個C++/CLR項目,我想這會工作:

添加節點,並設置它的構建工具自定義生成工具。然後,在自定義生成步驟頁面上,設置命令複製$(InputPath)$(OUTDIR)輸出$(OUTDIR)\ $(查找inputfilename)。看起來像應該工作。

+0

這聽起來像是一個很好的解決方法。至少它以這種方式在一個位置管理。我儘快嘗試一下,以確保它能正常工作。 但是我仍然對是否有完全自動化的解決方案感興趣。 – Ziphnor 2010-01-01 12:00:27

+0

我相信這個解決方案適用於託管的C#項目。但是,我們場景中的託管項目是一個C++ CLR項目。在C++ CLR項目中,沒有像C#項目中那樣的項目項目的「複製到輸出目錄」屬性。 是否有另一種方式來指定這樣的行動? – Ziphnor 2010-01-07 08:09:22

+0

@Ziphnor:編輯我的文章,包括一個應該與C++/CLR項目一起工作的方法。 – Tarydon 2010-01-07 08:34:17