2010-10-06 19 views
4

我负责维持原有VB6的代码,也碰到了一个恼人的问题是关于项目的COM DLL的锁定。 (我们叫它MyProject的MyProject.dllVB6 IDE锁定该项目加载的DLL

当我加载MyProject的到VB6 IDE,我可以编译生成的二进制兼容DLL MyProject.dll。然后,我可以运行我的(经典ASP)Web应用程序,该应用程序可以挂接到DLL(或其他任何相关事项)。

所以,当我试图重新编译COM DLL,我得到一个“许可被拒绝”的错误。然后我发现自己不得不进行下面的步骤,以使DLL被解锁:

  1. 检查我在其他VB6 IDE中打开的任何相关项目
  2. 回收IIS
  3. 检查文件ISN” t只读(有时候,如果我已将其检入源控件)
  4. 关闭项目并重新打开它。

通常这是解决问题的最后一步,并允许我重新编译,这意味着VB6 IDE实际上锁定了加载项目的DLL!

我的同事向我解释说这是用VB6项目与在该DLL的二进制兼容性的方式做,但未能提出一个解决方案。

我的搜索别处已在答案的方式产生了非常小。与此相关的搜索查询往往会返回许多不相关的答案(也许我问的是搜索引擎的错误)。

我能找到#2最接近的是从几年前this question,但它并没有真正适合该法案。

有没有人有任何其他建议可以改善这一点?

+0

你试过杀死asp进程(inetinfo)吗? – 2010-10-06 14:03:01

+0

@GôTô - 回收IIS执行此操作。我知道问题出在VB6环境 – 2010-10-06 14:29:50

+0

您确定吗? – 2010-10-06 15:00:22

回答

3

保持MyProject.dll命名为MyProject.cmp和点二进制兼容的设置拷贝发送到您.cmp文件。这样你就不需要重新打开项目文件(第4步)。

在登记入住期间,您可以标记继续结账也可以跳过第3步。

+0

是的,这将工作。好主意。但是,如果您没有按照您的建议创建副本,那么这会不会为项目环境造成一些混乱? – 2010-10-06 14:32:27

+0

...至于结帐 - 我通常做,但有时我忘了!这只是为了强调我必须经历的麻烦才能让DLL编译! :-) – 2010-10-06 14:34:15

+0

+1这是一个好主意,有几个原因,建议在VB6手册中使用http:// msdn。microsoft.com/en-us/library/aa733706(v=VS.60).aspx @James VBP中的二进制兼容设置,所以每个人都将使用相同的设置。我假设你保持在源代码管理VBP文件?我建议在源代码控制中保留'MyProject.cmp' – MarkJ 2010-10-06 17:17:38