2011-11-14 54 views
1

我有一個C++項目和一個C#項目的解決方案,它使用Interop從第一個項目調用方法。 因爲我想避免任何硬編碼的路徑,所以我找到了一種在app.config中設置C++ dll路徑的方法。 我的問題是,我的C++ DLL依賴於其他DLL,我總是必須將其複製到我的bin/Release和bin/Debug文件夾中。我怎樣才能避免這種情況? 如果我可以在app.config中設置第三方dll的路徑,那將會很好。 我發現這個如何避免複製第三方C++ dll?

<probing privatePath="bin\DLLs" />

,但它似乎只適用子目錄工作。

回答

2

請勿硬編碼DLL的位置。將目錄放入%PATH%變量中。假設Windows作爲環境讀取Search path for loading DLLs

編輯: %PATH%是一個環境變量,因此您可以使用Environment.SetEnvironmentVariables來設置它。我會從配置文件中讀取privatePath,並使用給定的方法將其附加到%PATH%。從配置文件讀取可以通過ConfigurationManager類來完成。

+0

我不是正如我剛纔提到的,硬編碼路徑。 如何在安裝過程中將我的目錄放入%PATH%變量中?我在您提供的鏈接中看不到任何提示.. 我可以在app.config中指定路徑嗎?這將是我的首選。 – Ben

+0

我在app.config中添加了一個密鑰,該密鑰在應用程序啓動期間(在Application.Run()之前的Program.cs中)使用AppSettingsReader讀取,並通過EnvironmentSetEnvironmentVariable()將其附加到PATH變量。這正是我所期待的! – Ben

1

我會寫在你的後生成事件folloing命令(所以你不需要做工作手冊)

xcopy /s c:\source\your_dll_folder c:\your_target_folder\bin\debug 
xcopy /s c:\source\your_dll_folder c:\your_target_folder\bin\Release 

這是你的項目後生成事件位置屬性 enter image description here

+0

好吧,我想這也可以,但是我更喜歡在啓動時通過設置PATH變量的非複製方式。不管怎麼說,還是要謝謝你 :) – Ben