Исключение внешнего компонента, связанное с папкой теневого копирования

У меня есть приложение, которое выдает ошибку «Внешний компонент вызвал исключение» при попытке связи с С# на С++ (исправление: это с С++ на С#). Решение C# включает надстройку VSTO, которая, по нашему мнению, может быть связана с проблемой. Только пользователи смогли воспроизвести эту проблему, и временное решение этой проблемы состояло в том, чтобы очистить папку теневой копии «AppData\Local\assembly\dl3» на их компьютере. Похоже, что надстройка VSTO создает библиотеки DLL в этой папке в виде теневых копий и похоже, нет способа предотвратить это.

У кого-нибудь есть идеи о том, как решить эту проблему?

Изменить: проблема возникает только тогда, когда происходит сетевое обновление для приложения C++, вызывающего DLL C#, а другой пользователь все еще находится в системе. Если теневая копия DLL, созданная надстройкой VSTO, не существует, то нет вопросы. Если теневая копия существует, два продукта не смогут обмениваться данными, пока не произойдет обновление приложения C# или если теневая копия не будет удалена. Однако использование надстройки VSTO приведет к воссозданию теневой копии и повторному разрыву соединения.


person user2483770    schedule 18.02.2016    source источник


Ответы (1)


Оказывается, дело было в звонке...

Assembly.GetExecutingAssembly().Location 

Решение C++ называло DLL C++, которая была частью моего решения C#, которое загружало сборку C#, используя...

Assembly::LoadFrom(assemblyPathString)

Затем эта сборка выполнит ошибочный вызов, который найдет другую теневую копию DLL вместо исходного местоположения. Переключение вызова на использование...

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

... решил проблему. Я не уверен, были ли части Uri и LocalPath необходимы или излишними.

person user2483770    schedule 02.03.2016