我有一個VSTO插件,它工作正常。我試圖給它一個插件加載機制,以便其他人可以將插件添加到我的插件。我知道,我聽起來很可怕,但現在看來似乎是最好的選擇。VSTO插件依賴分辨率
我將我的插件發佈到名爲'發佈'的文件夾。這將創建應用程序清單(Symbols.application),並創建一個名爲Symbols_x.y.xx.yy的文件夾,其中包含實際的插件程序集。每次發佈時,Visual Studio都會增加此版本號,所以程序集永遠不會在同一個地方出現兩次。
插件位於發佈\插件文件夾中。我使用Assembly.LoadFile(字符串)加載插件程序集,這工作正常。無論發佈多少次,插件都位於同一位置的文件夾中,我可以掃描該文件夾中的DLL並加載它們。
什麼不工作是當這些插件DLL有依賴關係。特別是,一個取決於一個COM對象。 Visual Studio會生成一個自動Interop DLL,並將其放入發佈\ Plugins文件夾以及相應的插件DLL中。一旦嘗試訪問COM對象,就會拋出異常,並說找不到互操作程序集。
將interop DLL放入發佈\ Symbols_x.y.xx.yy文件夾的文件夾中,但需要每次都手動將它放在那裏。我已經嘗試將插件添加到AppDomain的PrivateBinPath中,但文檔中說ApplicationBase之外的任何內容都將被忽略,看起來確實如此 - 它不起作用。 ApplicationBase被設置爲Published \ Symbols_x.y.xx.yy。
在我看來,我有四個選項:
- 圖如何改變ApplicationBase,移動它一個級別,然後添加發布\ Plugins文件夾到AppDomain中的PrivateBinPath。
- 對應用程序清單進行一些更改以指示程序集可以從Published \ Plugins自動加載。
- 找到一些其他方式顯式地將程序集加載到AppDomain中,而不是使用Assembly.LoadFile將程序集加載到內存中。
- 任何人都想要建議!
但我找不到任何方法讓這些選項工作。幫幫我!