2010-08-24 69 views
2

我有一個可執行文件,例如我從C:運行。可執行文件引用另一個目錄中的某些DLL,例如C:\ MyDLLs。問題是,這些引用的DLL再次依賴於其他DLL,它們存儲在另一個目錄中。我可以告訴Visual Studio在哪裏查找這些缺少的DLL嗎? 非常感謝!如何在Visual Studio/C中定義DLL依賴關係的工作目錄#

+0

幾年前,我不得不在這樣一個項目上做這樣的事情,而且這不太好。 :) 祝你好運!! – 2010-08-24 20:21:45

+0

嘿嘿謝謝;) – iDog 2010-08-24 20:39:01

回答

1

我以前有過這個問題,我創建了一個後期構建腳本,將所有需要的DLL複製到我的可執行文件的目錄中。

喜歡的東西: 複製 「$(PROJECTDIR)資源\ DLL文件\ yourDLL.dll」 「$(TARGETDIR)yourDLL.dll」

+0

謝謝,但這將是數百個DLL複製。其他想法? – iDog 2010-08-24 20:14:24

+0

http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspx它告訴你Windows用來查找DLL的搜索路徑。所以,你可以將C:\ DLLs目錄添加到PATH變量中。唯一的問題當然是它在搜索路徑列表中更低......所以如果它首先在其他位置之一中找到DLL,那麼它將超出它。 – KrisTrip 2010-08-24 20:16:58

+0

我已經試過了,好奇地它不起作用,我不知道爲什麼.. – iDog 2010-08-24 20:44:16

3

您可以通過設置這些值參考您的應用程序集加載規則之外組件在配置中。下面是從this Microsoft KB article一個示例配置文件:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="MyAssembly2" culture="neutral" publicKeyToken="307041694a995978"/> 
      <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

您使用<codeBase>元素來告訴你的應用程序在哪裏看。

您必須使該組件具有較強的名稱(使用sn.exe工具)才能正常工作。

瞭解運行時間resolves assembly references以及您可能會利用該優勢,而不是經歷所有的環節以使用<codeBase>也很有用。

+0

謝謝,我喜歡你的建議。使用System.Reflection.Assembly可能是我的問題的答案。我會試一試。謝謝。 – iDog 2010-08-24 20:29:00