为什么加载程序在注册表中查找我的免注册COM组件?

问题描述:

我已经成功地使用免注册COM来将COM组件加载到我的.Net进程中。突然之间发生了一些变化(虽然我午饭时外出,但看起来:-))并且加载过程停止工作。为什么加载程序在注册表中查找我的免注册COM组件?

虽然之前我的COM组件加载正确,现在我得到一个FileNotFoundException。

运行ProcMon探索发生了什么,我发现加载程序正在注册表中查找CLSID,并发现该组件已被注册。然后它查看注册的路径,并发现该dll不在那里。

任何人都可以告诉我为什么加载程序要在注册表中查找组件时使用免注册COM进行组态?我认为清单将优先于注册表,但我找不到任何有关此的文档。

+0

它只是做。我认为内部清单条目充当注册表条目的覆盖。 –

+0

但为什么它不在我的清单指定的位置? –

事实证明,罪魁祸首是Visual Studio Hosting process。当这涉及到应用程序的清单文件(它指定COM依赖关系)不会被读取。

所以简单的解决方法是disable the hosting process