2

我没有与 COM 合作太多,所以请原谅我的无知。

背景:我正在开发 VS 2010 中的一个项目。C# 解决方案中集成了一个 C# COM DLL,还有一个安装/部署项目 - 安装项目设置为在安装时注册 COM .tlb 文件。

问题:当有人决定安装最新版本的 C# 应用程序并因此安装最新的 COM DLL 时,PC 上存在 C# 应用程序的早期版本及其 COM DLL。发生这种情况时,它破坏了 C# 应用程序的两个版本的 COM 功能。或者这就是我假设发生的情况。

这是典型的 COM/DLL 地狱行为吗?当两个 C# 应用程序都被卸载,然后只重新安装一个,一切都恢复正常 - 显然不能同时安装。

我已经尝试更改 COM DLL 项目的 GUID,更改 COM DLL 项目的 AssemblyVersion 和 AssemblyFileVersion - 所有这些都具有不同的结果。当我更改这些项目时,应用程序的新安装工作(很好),但现在旧的 C# 应用程序没有工作功能。

注意:当 COM 功能失败时不会引发错误或异常 - COM 调用似乎什么都不做。所以它“默默地”失败了。

我一直在研究这个并尝试进行各种修改,但没有真正成功……也许我想错了。还有其他人对此有更多经验可以给我一些见解吗?

4

1 回答 1

0

您可以使用合并模块来安装 com 对象及其后续版本。这将允许您在同一台机器上拥有多个版本。来自微软:

合并模块就像组件特定版本的快照。应该为组件的每个后续版本创建一个新的合并模块,以避免版本冲突。

查看此链接:安装程序与合并模块建议

于 2012-12-21T21:41:09.967 回答