【问题标题】:ClickOnce – Redemption.dll - No such interface supportedClickOnce – Redemption.dll – 不支持此类接口
【发布时间】:2015-03-06 19:05:18
【问题描述】:

问题:

我正在更改我们为使用 ClickOnce 部署方法而开发的应用程序(项目 A)。我有一个使用 Redemption 的 VB DLL 项目。这已经在客户网站上运行了 3 年以上。我们目前使用 Install Shield 作为安装程序。通过此方法安装时,兑换工作正常。我们使用的是 VS2013,应用程序使用的是 .NET 3.5。

从 ClickOnce 构建安装应用程序后,应用程序运行但在尝试使用 Redemption 时出错:

无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Redemption.IRDOItems”。此操作失败,因为 IID 为“{F8408EB8-6B65-4704-810C-29795E67C0DD}”的接口的 COM 组件上的 QueryInterface 调用失败,原因是以下错误:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE)) .

我有另一个使用 ClickOnce 部署的应用程序(项目 B),它也使用了 Redemption,并且运行良好。在这个项目中,与 Redemption 的区别在于它是在主项目中引用和使用的,而不是解决方案中的 DLL 项目。在这个项目中,赎回列在应用程序文件下。此应用程序使用 .NET 4.0。

为了让项目 A 工作,我复制了项目 B 中使用的设置。

在 Project B Redemption 中标记为:

  • 隔离=真
  • 嵌入互操作类型 = True

在 Project A Redemption 中标记为:

  • 隔离 = 真
  • 复制本地 = True

嵌入互操作类型不存在,因为它是 .NET 3.5

项目 A 的应用程序文件中没有列出 Redemption.DLL,但是如果我查看已发布的文件,它已包含在内,并且还部署在客户端计算机上。

VB DLL 的本机清单包含项目 B 清单中的所有接口条目。

我在 bing/google 搜索后发现了一些建议,但我找不到与 COM 文件有完全相同问题的人。这是我尝试过但失败的方法:

将 Redemption 文件添加到主项目(未对其进行引用)并设置 Build Action = Content and Copy to Output Directory = Copy Always。

  • 这在发布时给了我一个错误,指出清单 赎回已经完成(即本机清单 VB DLL)。
  • 更改 VB DLL 中的 Redemption 引用,使其不被隔离 允许构建工作,但仍然收到原始错误。
  • 构建操作和隔离的不同组合 VB DLL 中的赎回产生了相同的结果。

将 Redemption 文件添加到主项目,但这次引用它。在主项目中设置isolated = true,在VB DLL 中设置为false。还尝试了在主工程和VB DLL中隔离和复制本地的各种组合。

编辑主项目文件并添加一个项目组以部署清单,如下所述:

我将项目 A 更改为使用 .NET 4.0,因此我可以在 Redemption 上使用与项目 B 完全相同的设置。

所有结果都相同。

总结:

Redemption.DLL 似乎已部署,但未以 VB DLL 看到它的方式注册。 任何建议都将受到欢迎。

【问题讨论】:

    标签: .net clickonce


    【解决方案1】:

    为了完成这项工作,我结束了创建 Redemption 作为先决条件。

    我创建了安装项目来安装 Redemption。为了使引导程序可以用作先决条件,我按照此处的说明进行操作https://msdn.microsoft.com/en-us/library/h4k032e1.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 2014-07-15
      • 1970-01-01
      • 2020-08-08
      • 2014-12-05
      相关资源
      最近更新 更多