2013-06-05 14 views
0

我更新了自定义的.Net组件,但忘记先注销先前的版本。如何取消注册.Net组件而不使用实际的dll

而不是取消注册,我只是复制新的DLL在旧版本。

组件暴露给COM,现在我在传统的ASP页面上收到“无法创建对象”消息。

我猜旧的组件信息保留在注册表或系统其他地方的某处。有没有办法删除/卸载/取消注册这些信息,而没有真正的DLL?

我尝试Regasm工具来取消注册组件,但现在我只能提供路径到新的DLL,因为旧的DLL被覆盖。

任何其他方式从系统中删除旧版本信息,并只注册新的DLL?

谢谢!

+0

可能的重复[如何取消注册我的.net程序集,当它不再在同一位置?](http://stackoverflow.com/questions/455073/how-to-unregister-my-net-assembly-when - 不再在同一地点) –

回答

1

忘记取消注册程序集只会在注册表中留下垃圾。这是sl and,很难摆脱,但肯定不是世界末日。许多旧式机器都有类似的垃圾,这是注册表清洁工自称可以摆脱的那种垃圾。这不是对那种顺便说一句的工具的认可。

它不会阻止更新的程序集正常工作。假设你做得对,并正确运行Regasm.exe,使用了/ codebase选项,这样你就不会麻烦GAC并更新了ASP项目中的类型库引用。后者是被忽略的典型步骤,它可能仍然使用旧的注册码。

反措施是(暂时)在接口和类声明中使用[Guid]属性。因此用于注册组件的注册表键总是相同的。您不能以这种方式在注册表中添加垃圾,更新将始终覆盖相同的密钥。假设您没有添加任何接口或类或者更改了DLL的路径,您甚至可以跳过更新的注册步骤

然而,您应该在项目稳定并且您即将发货后再次删除这些[Guid]属性。不这样做调用DLL地狱,没有什么可以混淆。

Regasm.exe/regfile选项值得注意。您可以参见正在使用哪些注册密钥。

+0

嗨汉斯,谢谢你的回答。我没有更改任何GUID,所以在这种情况下,组件应该无需重新注册? 然后,也许这是一些权限问题。无论如何,我得到 “80070002系统找不到指定的文件”。你曾经处理过这个错误? :) – BorisP

+1

那么,“文件未找到”肯定是一个*非常*常见的错误。如果你不知道什么可能会导致它,那么使用SysInternals的ProcMon。你会看到它在找什么。 –