我有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。