ClickOnce - Redemption.dll - 不支持此类界面

时间:2015-02-04 12:12:24

标签: .net clickonce

问题:

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

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

  

无法转换类型为' System .__ ComObject'的COM对象。界面类型' Redemption.IRDOItems'。此操作失败,因为QueryInterface调用COM组件的接口与IID' {F8408EB8-6B65-4704-810C-29795E67C0DD}'由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE))。

我有另一个使用ClickOnce部署的应用程序(项目B),它也使用了Redemption,它运行正常。在这个项目中,与Redemption的区别在于它在主项目中被引用和使用,而不是在解决方案中的DLL项目。在此项目中,Redemption列在Application Files下。此应用程序使用.NET 4.0。

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

在项目B中,赎回被标记为:

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

在项目A中,赎回被标记为:

  • 隔离=真
  • 复制Local = True

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

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

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

我在bing / google搜索后找到了一些建议,但我找不到与COM文件完全相同的人。这是我尝试但失败的原因:

将Redemption文件添加到主项目(未引用),并将Build Action = Content和Copy to Output Directory设置为= Always Always。

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

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

编辑主项目文件并添加项目组以按照此处所述部署清单:

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

所有具有相同的净结果。

要点:

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

1 个答案:

答案 0 :(得分:1)

为了实现这一目标,我结束了创建Redemption作为先决条件。

我创建了安装Redemption的安装项目。为了使引导程序可以作为一个先决条件,我按照这里的说明https://msdn.microsoft.com/en-us/library/h4k032e1.aspx