无需注册即可构建VB6项目

时间:2013-06-18 23:07:31

标签: tfs vb6 msbuild

我们有一个使用ActiveX控件的旧VB6项目,其中一些是我们构建的,另一些是我们从第三方供应商处获得的。

目前,我们使用.csproj项目执行以下操作,

  • 执行regsvr32以注册OCXs
  • 执行vb6以构建VB6项目
  • 执行regsvr32以取消注册OCXs

这种注册/取消注册很难看,对于启用了UAC的本地开发人员构建来说有点痛苦。是否可以在不必注册任何控件的情况下构建VB6项目?

如果之前已经提出要求,我道歉。我能找到的唯一类似的问题是关于如何构建VB6项目,并且这些问题的答案提到了注册,构建,取消注册的相同解决方案。

3 个答案:

答案 0 :(得分:1)

这意味着原始开发人员可能没有正确设置“二进制兼容性”。这意味着VB6 dll每次构建时都会获得“新的com”。 这意味着你原来的VB6开发人员可能是一堆黑客。

您可以阅读此处有关二进制兼容性的部分。

http://support.microsoft.com/kb/161137

进入时间机器,然后回去打脸,说“我们不需要 为了解决二进制兼容性问题,我们只需取消注册并重新注册组件...... Easy Peezey!“................

如果我错了,请告诉我。但每当我看到“取消注册com”和“重新注册com”时,它就会回到那个brainiac决定。

这是一个较长时间的讨论:

http://www.techrepublic.com/article/demystifying-version-compatibility-settings-in-visual-basic/5030274

编辑:

如果ocx没有改变........那么你只需要在构建机器上注册一次。

答案 1 :(得分:1)

听起来这些人只是在为这些OCX的客户工作,而不是自己修改和重新编译OCX。

如果是这样,您应该像管理VB6开发系统本身一样管理这些库的安装。这意味着每个工作站需要安装一次的控件套件(好的,并在新版本投入使用时进行维护)。开发人员库的安装程序会部署诸如.DEP文件以及设计时许可证密钥注册表项之类的内容,因此无论如何使用regsvr32不应被视为可行的策略。

如果您正确设置开发人员工作站并维护它们,则没有任何理由进行注册和注销。

答案 2 :(得分:0)

直接的答案是否定的,如果没有注册那些依赖项,就不可能编译具有OCX依赖项的VB6项目。

此外,编译操作本身涉及VB6尝试注册它刚刚构建的内容(除非您要编译为EXE)。这通常需要VB6 IDE和/或其编译器以“管理员”权限运行。因此,无论如何,权限都是很难避免的问题。

我相信,VB6本身(IDE和/或运行时)有时会尝试为您自动注册某些内容,但在这样做时将保持沉默。


您可能应该创建一个与部署中使用的构建过程不同的过程来设置开发PC。这可能会“感觉”错误,特别是如果您有其他编程环境的经验,但是我要强调,VB6使用起来会非常痛苦且存在问题,因此实用主义通常是有条理的。

在开发PC上::一次性设置所有不变的依赖项(并记录它们),然后将其保留(as noted in another answer。)当发生奇怪的依赖项问题时,请验证PC是否已安装正确地做其他事情。

如果您具有依赖项的所有源代码,那么我将考虑是否可以在VB6项目组(VBG)中实际运行它们而根本不进行编译。 (一个VBG类似于.NET解决方案,尽管功能远不如它强大。)我经常这样做,这样可以节省很多浪费的时间。开发人员不一定需要将代码编译为EXE / DLL / OCX-他们通常只需要能够在IDE中运行它即可。

在构建PC上::如果您始终可以在一个干净的环境(例如虚拟机)中启动,那么我认为以这种方式自动从头开始注册所有内容实际上是个好主意。帮助验证没有丢失或不匹配的内容。如果在源代码管理中某些依赖关系已更改但仍存在于构建计算机上,则不执行此操作而重复使用相同的构建环境可能会掩盖问题。在VM上,权限通常不是限制因素。


注意:

  • 如果要生成EXE,据我所记得,VB6不需要任何提升的权限。

  • VB6 IDE中的运行代码也没有。


[注意事项1]:

从技术上来说,可以为VB6.exe本身创建并排的应用程序清单文件,并在清单中包含所需的任何依赖项,从而避免注册它们。

但是,这完全超出了使用VB6工具的常规方法的范围-这是一个hack-可能不值得付出巨大的努力。我认为我从未见过有效的示例,因此,我不推荐此示例作为实用的解决方案,但出于完整性考虑而提及。

也许在某些封闭的公司IT场景中,这可能会有所回报……也许。在这种情况下,在VM中进行开发工作可能是更好的选择。