0

我有一个应用程序在尝试从 C# 到 C++ 通信时抛出“外部组件已引发异常”错误(更正:这是从 C++ 到 C#)。C# 解决方案涉及我们认为可能与该问题相关的 VSTO 加载项。只有用户能够复制此问题,并且该问题的临时解决方案是清除其计算机上的“AppData\Local\assembly\dl3”卷影副本文件夹。似乎 VSTO 加载项正在将该文件夹中的 dll 创建为卷影副本,并且似乎没有办法阻止它

有人对如何解决这个问题有任何想法吗?

编辑:仅当 C++ 应用程序调用 C# DLL 的网络更新发生并且另一个用户仍然登录时,才会出现此问题。如果由 VSTO 加载项创建的 DLL 的卷影副本不存在,则没有问题。如果卷影副本确实存在,那么这两个产品将无法通信,直到 C# 应用程序发生更新或删除了卷影副本。使用 VSTO 加载项将导致重新创建卷影副本并再次中断连接。

4

1 回答 1

0

事实证明,问题是调用...

Assembly.GetExecutingAssembly().Location 

C++ 解决方案称为 C++ DLL,它是我的 C# 解决方案的一部分,它将使用 ...

Assembly::LoadFrom(assemblyPathString)

然后,该程序集将进行有问题的调用,该调用将找到不同的影子复制 DLL 而不是原始位置。切换呼叫以使用...

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

...解决了这个问题。我不确定 Uri 和 LocalPath 部分是必要的还是矫枉过正的。

于 2016-03-02T21:13:32.613 回答