2016-02-18 33 views
0

我有一個應用程序在嘗試從C#到C++(更正:這是從C++到C#)通信時拋出「外部組件已拋出異常」錯誤。 C#解決方案涉及一個我們認爲可能與問題相關的VSTO插件。只有用戶能夠複製此問題,並且針對該問題的臨時修復已將其計算機上的「AppData \ Local \ assembly \ dl3」卷影副本文件夾清除。看起來,VSTO加載項是在該文件夾中創建dll作爲卷影副本和there does not seem to be a way to prevent it涉及卷影副本文件夾的外部組件異常

有沒有人有關於如何解決這個問題的任何想法?

編輯:只有當調用C#DLL的C++應用程序的網絡更新發生並且其他用戶仍然登錄時纔會出現此問題。如果由VSTO加載項創建的DLL的卷影副本不存在那麼就沒有問題了。如果卷影副本確實存在,那麼在C#應用程序發生更新或刪除卷影副本之前,這兩種產品將無法通信。使用VSTO加載項將導致重新創建卷影副本並重新斷開連接。

回答

0

原來,問題是調用...

Assembly.GetExecutingAssembly().Location 

C++的解決方案稱爲,這是我的C#解決方案的一部分,這將使用加載一個C#程序集的C++ DLL ...

Assembly::LoadFrom(assemblyPathString) 

然後,該程序集將進行有問題的調用,它將查找不同的陰影複製DLL而不是原始位置。切換呼叫以使用...

new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath 

...解決了問題。我不確定Uri和LocalPath部分是否必要或過度殺傷。