问题:
我正在更改我们开发的应用程序(项目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中,赎回被标记为:
嵌入互操作类型不存在,因为它是.NET 3.5
Redemption.DLL未在项目A的应用程序文件中列出,但是,如果我查看已发布的文件,它将被包含在内,并且它也部署在客户端计算机上。
VB DLL的Native清单包含项目B清单中的所有接口条目。
我在bing / google搜索后找到了一些建议,但我找不到与COM文件完全相同的人。这是我尝试但失败的原因:
将Redemption文件添加到主项目(未引用),并将Build Action = Content和Copy to Output Directory设置为= Always Always。
将Redemption文件添加到主项目,但这次引用它。在主项目中设置isolated = true并在VB DLL中设置为false。还尝试了主项目和VB DLL中的隔离和复制本地的各种组合。
编辑主项目文件并添加项目组以按照此处所述部署清单:
我将项目A更改为使用.NET 4.0,因此我可以根据项目B在Redemption上设置完全相同的设置。
所有具有相同的净结果。
要点:
Redemption.DLL似乎已部署但未以VB DLL的方式注册以查看它。 任何建议都是最受欢迎的。
答案 0 :(得分:1)
为了实现这一目标,我结束了创建Redemption作为先决条件。
我创建了安装Redemption的安装项目。为了使引导程序可以作为一个先决条件,我按照这里的说明https://msdn.microsoft.com/en-us/library/h4k032e1.aspx