我们这里有一个用VB6写的项目(是的,我知道.)它消耗了一些ActiveX对象,这些对象也是用VB6 (OCX文件)编写的。
最近,我们开始为这个项目使用一个构建服务器,并且在MSBuild扩展包的帮助下,我们设计了一个构建过程,它以正确的顺序编译库、控件和可执行文件,并根据适当的顺序注册它们,然后注销所有内容,以便为下一次运行留下干净的机器。
问题是,每次编译运行都会在注册表中留下VB6编译器似乎需要的扩展类型库/对象缓存文件的条目,并且在未注册控件时不会删除这些条目。
也就是说,对于每个具有指向OCX的CLSID条目的注册组件,在我们使用VB6编译项目之后,存在一个新生成的用于OCA的CLSID。
因为每次构建后我们取消注册OCX控件,每次都重新生成OCA,因此OCA条目的数量继续增加。
有谁知道是什么原因造成了这些条目,我们是否可以通过某种注销过程删除它们,或者我们是否能够首先防止它们被创建?
几个注意事项:
发布于 2014-11-27 11:30:47
关键是停止尝试将DLL(包括OCX)视为静态链接库。您的构建过程不合适。
虽然VB6支持粗糙的“项目组”功能,但这只适用于小规模的、非结构化的开发工作,比如那些未被雷达探测到的业务单位编码者所使用的开发工作。
相反,要努力在EXE项目中保持以应用程序为中心的逻辑。将长期可重用逻辑分解到DLL和OCX项目中,将它们视为独立的、独特的内部产品。将这些(包括源代码管理)与使用的应用程序分开维护。
通常,这些代码应该比应用程序代码更稳定,在应用程序代码中,更改更频繁地由它们所包含的业务逻辑驱动。
即使其中一些必须包含业务逻辑,您仍然希望将它们作为单独的软件实体来处理。尝试将它们与具有更多稳定性的库区别开来。
这需要更多的纪律,而不是单一的“贝伯塔”的发展,但有许多回报。首先,构建时间更快。而且,作为一种奖励,几乎所有这些与源代码管理相关的问题对于应用程序来说都消失了,因为这些应用程序的修补和篡改率要高得多。
https://stackoverflow.com/questions/27146169
复制相似问题