当前位置: 首页 > 编程语言 > C#

COM互操作并行组件分享

时间:2023-04-10 13:48:41 C#

COM互操作并行组件我需要部署同一个C#.NET项目的多个版本。项目输出是用于本机应用程序的COM互操作程序集。我遇到的问题是我必须并排部署此程序集的多个版本,但无论我做什么,它似乎都不会创建不同的版本。相反,版本相互覆盖。我试过更改程序集GUID,尝试更改程序集版本号,尝试重新生成程序集强名称密钥,尝试更改程序集标题和描述。我宁愿不必更改程序集中各个类型的GUID或名称以进行版本控制。我如何确保这些版本不会相互覆盖并且我可以并排查看和部署它们?提前致谢!使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Runtime.InteropServices;namespaceInteropTest{[Guid("...")][ClassInterface(ClassInterfaceType.AutoDual)]publicclassTest{publicTest(){}publicstringVersion{get{return"1.0";}}}}我宁愿不必更改程序集中各个类型的GUID或名称以进行版本控制。但这正是防止COM类型相互干扰所必须做的。[指南]HKLM软件类中的注册表项CLSID用于选择已注册的COM类。具有相同Guid的两个不同版本将覆盖彼此的密钥。否则称为DLL地狱。更改公共接口需要一个新的Guid,以确保使用旧Guid的客户不会死于无法诊断的不当行为。坚如磐石的COM要求。很有可能省略[Guid]属性,现在让CLR为您生成一个。现在程序集属性开始发挥作用,guid值由灵活的算法自动生成,其中包括程序集名称和版本以及接口上的方法集及其参数。这确保任何更改都会自动生成不同的guid。并且,正如预期和要求的那样,不同的[AssemblyVersion]将生成不同的[Guid]。另一种方法,也就是我所说的“并排”,是不注册程序集,而是依赖清单。它必须嵌入到客户端程序中,使用元素声明[ComVisible]类。版本控制现在是一个部署细节。MSDN操作方法在此处。请记住,它必须嵌入到客户端程序中,而不是[ComVisible]程序集中。这通常是一个问题。如果可以,请尝试延迟绑定到本机应用程序中的互操作程序集。我还建议不要使用AutoDual自动生成界面,而是明确生成您自己的阅读以获取更多信息。您可以通过打开注册表并搜索Guid和ProgId以查看已注册程序集的版本来解决该问题。以上就是C#学习教程:COMInteroperableSide-by-SideComponents分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: