ClickOnce – Redemption.dll - 不支持此类接口
ClickOnce – Redemption.dll - No such interface supported
问题:
我正在更改我们开发的应用程序(项目 A)以使用 ClickOnce 部署方法。我有一个使用 Redemption 的 VB DLL 项目。这已经 运行 在客户站点上存在了 3 年多。我们目前使用 Install Shield 作为安装程序。通过此方法安装时,赎回工作正常。我们正在使用 VS2013,应用程序使用 .NET 3.5。
从 ClickOnce 构建安装应用程序后,应用程序运行但在尝试使用 Redemption 时出错:
Unable to cast COM object of type 'System.__ComObject' to interface type 'Redemption.IRDOItems'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{F8408EB8-6B65-4704-810C-29795E67C0DD}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
我有另一个使用 ClickOnce 部署的应用程序(项目 B),它也使用 Redemption 并且工作正常。在此项目中,与 Redemption 的不同之处在于,它是在主项目中引用和使用的,而不是解决方案中的 DLL 项目。在此项目中,Redemption 列在 Application Files 下。此应用程序使用 .NET 4.0。
为了让项目 A 工作,我复制了项目 B 中使用的设置。
在项目 B 中,赎回被标记为:
- 孤立 = 真实
- 嵌入互操作类型 = True
在项目 A 中,赎回被标记为:
- 孤立 = 真实
- 复制本地 = True
嵌入互操作类型不存在,因为它是 .NET 3.5
Redemption.DLL 没有在项目 A 的应用程序文件中列出,但是如果我查看已发布的文件,它是包含的,并且它也部署在客户端机器上。
VB DLL 的本机清单具有项目 B 清单中的所有接口条目。
我在 bing/google 搜索后找到了一些建议,但找不到对 COM 文件有完全相同问题的人。这是我尝试过但失败的方法:
将 Redemption 文件添加到主项目(未引用它)并设置 Build Action = Content 和 Copy to Output Directory = Copy Always。
- 这让我在发布时出错,指出清单
赎回已经完成(即本机清单
VB动态链接库)。
- 更改 VB DLL 中的 Redemption 引用,使其不被隔离
允许构建工作但仍然收到原始错误。
- 构建操作和隔离的不同组合
VB DLL 中的赎回产生相同的结果。
将 Redemption 文件添加到主项目中,但这次是引用它。在主工程中设置isolated = true,在VB DLL中设置为false。还在主项目和 VB DLL 中尝试了隔离和复制本地的各种组合。
编辑主项目文件并添加项目组以部署清单,如下所述:
我将项目 A 更改为使用 .NET 4.0,这样我就可以拥有与项目 B 完全相同的赎回设置。
全部具有相同的最终结果。
总结:
Redemption.DLL 似乎已部署,但未以供 VB DLL 看到的方式注册。
欢迎提出任何建议。
为了完成这项工作,我结束了创建 Redemption 作为先决条件。
我创建了安装项目来安装 Redemption。为了制作引导程序以便它可以用作先决条件,我按照此处的说明进行操作 https://msdn.microsoft.com/en-us/library/h4k032e1.aspx
问题:
我正在更改我们开发的应用程序(项目 A)以使用 ClickOnce 部署方法。我有一个使用 Redemption 的 VB DLL 项目。这已经 运行 在客户站点上存在了 3 年多。我们目前使用 Install Shield 作为安装程序。通过此方法安装时,赎回工作正常。我们正在使用 VS2013,应用程序使用 .NET 3.5。
从 ClickOnce 构建安装应用程序后,应用程序运行但在尝试使用 Redemption 时出错:
Unable to cast COM object of type 'System.__ComObject' to interface type 'Redemption.IRDOItems'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{F8408EB8-6B65-4704-810C-29795E67C0DD}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
我有另一个使用 ClickOnce 部署的应用程序(项目 B),它也使用 Redemption 并且工作正常。在此项目中,与 Redemption 的不同之处在于,它是在主项目中引用和使用的,而不是解决方案中的 DLL 项目。在此项目中,Redemption 列在 Application Files 下。此应用程序使用 .NET 4.0。
为了让项目 A 工作,我复制了项目 B 中使用的设置。
在项目 B 中,赎回被标记为:
- 孤立 = 真实
- 嵌入互操作类型 = True
在项目 A 中,赎回被标记为:
- 孤立 = 真实
- 复制本地 = True
嵌入互操作类型不存在,因为它是 .NET 3.5
Redemption.DLL 没有在项目 A 的应用程序文件中列出,但是如果我查看已发布的文件,它是包含的,并且它也部署在客户端机器上。
VB DLL 的本机清单具有项目 B 清单中的所有接口条目。
我在 bing/google 搜索后找到了一些建议,但找不到对 COM 文件有完全相同问题的人。这是我尝试过但失败的方法:
将 Redemption 文件添加到主项目(未引用它)并设置 Build Action = Content 和 Copy to Output Directory = Copy Always。
- 这让我在发布时出错,指出清单 赎回已经完成(即本机清单 VB动态链接库)。
- 更改 VB DLL 中的 Redemption 引用,使其不被隔离 允许构建工作但仍然收到原始错误。
- 构建操作和隔离的不同组合 VB DLL 中的赎回产生相同的结果。
将 Redemption 文件添加到主项目中,但这次是引用它。在主工程中设置isolated = true,在VB DLL中设置为false。还在主项目和 VB DLL 中尝试了隔离和复制本地的各种组合。
编辑主项目文件并添加项目组以部署清单,如下所述:
我将项目 A 更改为使用 .NET 4.0,这样我就可以拥有与项目 B 完全相同的赎回设置。
全部具有相同的最终结果。
总结:
Redemption.DLL 似乎已部署,但未以供 VB DLL 看到的方式注册。 欢迎提出任何建议。
为了完成这项工作,我结束了创建 Redemption 作为先决条件。
我创建了安装项目来安装 Redemption。为了制作引导程序以便它可以用作先决条件,我按照此处的说明进行操作 https://msdn.microsoft.com/en-us/library/h4k032e1.aspx