【问题标题】:COM troubles between two versions of a C# Application两个版本的 C# 应用程序之间的 COM 问题
【发布时间】:2012-12-22 06:12:10
【问题描述】:

我对 COM 的工作不多,所以请原谅我的无知。

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

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

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

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

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

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

【问题讨论】:

    标签: c# com


    【解决方案1】:

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

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

    查看此链接:Installer vs. Merge Module Recommendations

    【讨论】:

    • 我试过这个 - 也许我做错了,但我得到了和以前一样的症状。 Merge Module 项目似乎只是一种重新包装事物以获得相同结果的方式。不管我是否编辑我的程序集版本,旧版本的程序仍然有明显缺失的功能。
    • stariath,试试这个:在您的 C# 应用程序中,转到您的 com 对象的引用并单击它。在属性中向下滚动到独立属性并选择 True。重建您的项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2015-06-07
    • 2016-07-27
    • 2011-08-07
    • 1970-01-01
    • 2011-07-14
    • 2010-11-28
    相关资源
    最近更新 更多