gpt4 book ai didi

.net - 强制 .NET 互操作使用本地 COM DLL

转载 作者:行者123 更新时间:2023-12-02 13:48:04 24 4
gpt4 key购买 nike

是否可以强制互操作程序集引用其关联 COM DLL 的本地副本?

这是场景:

我有一个引用互操作程序集 (Interop.OTAClient.dll) 的 .NET 应用程序,该程序集是 COM DLL 的互操作程序(OTAClient.dll,它是 HP Quality Center 的自动化 API)。我对 COM 不太了解,但据我了解,互操作程序集通过注册表中的 GUID 引用查找 COM 类,而不是指向特定文件。

我遇到的问题是,注册表项指向的 OTAClient.dll 副本会被不同版本覆盖,具体取决于我刚刚在浏览器中登录的 QC 版本,并且这些 DLL 的不同版本是彼此不兼容。 .NET 应用程序将仅连接到特定版本的 QC,因此我不能让 COM DLL 以这种方式变化。

任何建议将不胜感激,因为这种行为确实令人恼火。我见过关于 COM 互操作问题的其他问题,但它们似乎都是关于强制使用互操作 DLL 的本地版本而不是 GAC 中的版本,而不是涉及实际 COM DLL 的这一特定场景。

最佳答案

帕维尔为我指明了正确的方向,所以我将把他标记为答案。为了其他人的利益,我做了以下事情:

  1. 添加了对原始 OTAClient.dll 的引用,并让 Visual Studio 生成互操作库。
  2. 在解决方案资源管理器中右键单击引用的库,然后单击“属性”。然后将“隔离”设置为“真”。这会导致 VS 生成一个 list 文件,告诉您的程序在本地查找 COM 库,而不是注册表中列出的库。
  3. 具体到我的场景 - 我还必须引用 Quality Center 中的 WebClient.dll 并将“隔离”设置为 True。使用 OTA API 的应用程序不会直接使用它,但似乎由 OTAClient.dll 引用。

这样,您就可以登录和注销其版本与您的应用程序使用的版本不同的 QC 实例,而不会破坏它。就我而言,我有一个 v9 的本地 QC 实例,用于特定于项目的自动化(出于各种原因,它经过大量定制以满足我们的需求,有大量的空间用于屏幕截图存储等),并且我的应用程序连接到该实例。但是,对于手动测试,我还需要在 IE 中使用登录到位于其他地方的 v9.2 实例。如果我之前登录过 v9.2 实例,那么我必须在 IE 中打开 v9 实例并让它重新下载控件,然后才能再次运行我的应用程序......但现在我不需要。 :)

关于.net - 强制 .NET 互操作使用本地 COM DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com