在构建

时间:2016-12-11 05:54:51

标签: c# visual-studio-2015 com

我有c#类库,我使用了一些非托管的COM组件。在COM组件的引用中,我设置了Isolate = True,这导致VS在构建期间输出Native.MyLibrary.manifest文件。

在免费注册方案中,除非我向生成的清单添加<comInterfaceExternalProxyStub />元素,否则非托管COM代码无法正常运行。

除了使用一些后期构建脚本之外,是否可以在构建期间自动包含元素?

更多详情

非托管COM组件公开了我连接的许多事件。在免费应用程序中,这些事件仅在连接处理程序的原始线程为MTA并且库中清单中存在<comInterfaceExternalProxyStub />时触发。我已尝试使用和不使用接口存根的STA线程,但只调用 COM函数工作,事件永远不会在STA下激活。

我尝试将app.manifest文件添加到我的项目中,并复制以前生成的Native.MyLibrary.manifest的所有内容(使用InterfaceStub元素)。然后我关闭Isolated = True并重建。但是VS意外地在文件中添加了第二个<comInterfaceExternalProxyStub />半完整的IID和TLBID Guids来自我在项目中的app.manifest中手动定义的文件。清单中的信息重复会导致调用应用程序抛出错误。

我目前的解决方法是在项目中的XML文件中包含完整的工作清单,然后在后期构建任务中用它覆盖VS生成的Native.MyLibrary.manifest。

0 个答案:

没有答案