2011-11-07 85 views
1

OK組件,這裏是設置:配置自定義大會決議依賴於一個類庫

  • VB6的.exe文件,消耗一些.NET類。
  • 的類位於5個.dll文件的,而是通過一個COM可見包裝暴露的.dll
  • 使用的應用程序清單,我可以存儲在一個子文件夾命名MyCOMVisibleWrapper的COM可見MyCOMVisibleWrapper.dll(和.TLB)包裝。
  • 我想在該文件夾中存儲依賴.Net .dlls。
  • 但是,CLR會在VB6可執行文件所在的文件夾中查找這些.dll文件,而不是在包裝器.dll所在的文件夾中。

如何將MyCOMVisibleWrapper文件夾添加到解析路徑中?我試圖包含一個帶有<probing privatePath=MyComVisibleWrapper/>標記的MyCOMVisibleWrapper.dll.config文件,但這不起作用。我閱讀了關於實現AssemblyResolve EventHandler的內容,但我不確定應該在哪裏放置,因爲.Net代碼沒有主要入口點。

回答

0

你必須做出一個名爲MyVB6App.exe.config一個配置文件具有以下內容:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <probing privatePath="MyCOMVisibleWrapper"/> 
     </assemblyBinding> 
    </runtime> 
    </configuration> 

現在你可以把整個事情,除了MyVB6App.exe.Manifest在MyComVisibleWrapper文件夾。

請看here進行更廣泛的討論

0

如果您的包裝器DLL正確定位,那麼您可以在那裏處理Assembly解決方案。或者你可以明確地使用LoadFrom從你想要的路徑加載這些裝配。 (您需要對LoadFrom使用一些注意事項,因爲一些涉及多個地方的用例可能會導致錯誤)。

+0

感謝您的回覆。問題是包裝程序.dll沒有主入口點,它只是一堆接口和類,它們實現了接口並繼承了本地CLR類來執行一些參數調用。 – Dabblernl

+0

Perhpas可以使用靜態構造函數來確保代碼運行。如果沒有你確定要加載的中心類,我想你可以在每個公共類中添加一個餅乾靜態構造函數,然後引用一個單例靜態類來靜態構造它。在那個單例中,你可以放置你的AssemblyResolve代碼。 – tcarvin

相關問題