2012-04-30 61 views
2

我有一個Windows,C++軟件項目具有以下(簡體)文件格式(與Visual Studio 2005,SP1建):我可以修改並排裝配搜索順序嗎?

{App. Root Directory} 
|-- bin 
| |-- Microsoft.VC80.CRT 
| +-- Microsoft.VC80.MFC 
+-- utils 

有跡象表明,生活在兩個各種可執行utils目錄。這些可執行文件中的每一個都依賴於我們存儲在bin中的並行程序集(C++運行時DLL),但由於各種原因,我們已將它們分離到這些單獨的文件夾中(例如,實用程序中的exes文件夾是我們的主應用程序的補充工具,並且很少運行)。由於該文件組織的一個直接結果是,在utils的文件夾中的應用程序無法在那個還沒有相應的側面通過側組裝件安裝(他們不能與通常的「系統無法執行該系統上運行指定的程序「錯誤信息)。

我的問題:有沒有辦法,我可以告訴應用程序在utils的文件夾,在文件夾..\bin明確地尋找合適的側面通過側組裝件? Microsoft的Assembly Searching Sequence文章沒有提到這是可能的或不可能的。有沒有一種巧妙的方法可以解決這些應用程序的運行時需求?

潛在的選擇我見:

  1. 放置並排側組件的副本到utils的文件夾。這可以在運行時完成(以防止膨脹我們的應用程序安裝包),但似乎有點骯髒。
  2. 靜態鏈接的運行時DLL的。 我不想這樣做!
  3. 有最終用戶安裝通常再發行組件包。 我寧願不要這樣做。

回答

3

我的第一個反應是,有什麼實際的好處是從.\bin文件夾分離公用事業衍生?我自己也有OCD傾向,但我理解這種整潔的感覺,但一旦它看起來可能會對您部署應用程序的能力產生負面影響,繼續實踐似乎有點毫無意義。

這就是說,它實際上是技術上是可行的。爲此,您可以使用app.config文件中的probing privatePath元素。 應用程序配置文件的工作方式類似於應用程序清單,但他們不能作爲資源嵌入:創建一個文件,在同一文件夾中的exe,與exe文件的全名(包括.exe擴展)和追加.config

<!-- acme.exe.config --> 
<configuration> 
    <windows> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;..\bin" /> 
    </assemblyBinding> 
    </windows> 
</configuration> 

有一些注意事項,使該解決方案可能不可行的 - 任何DLL的指定自己的依賴程序需要有一個probing privatePath元素的應用的配置文件。 爲probing節點只在Windows NT 6.0(Vista)的加入也支持因此該方案是不適當的,如果你還需要針對XP。

+0

我已經在這裏和其他地方看到過你的帖子,並試圖將它應用於我的案例,但是如果你只部署dll並且你想擁有一個acme.dll.config,它似乎不起作用。您上面張貼在dll配置文件上的內容完全相同,但似乎沒有任何效果。 – ForeverLearning

+0

你確定該dll不包含清單作爲資源? –

+0

感謝您回覆我。我找到了一種不同的方法來做到這一點,但它太冗長了,無法在評論部分解釋它。將嘗試將它放在github上的某個地方以供更廣泛的觀衆觀看。 – ForeverLearning

相關問題