如何在没有实际dll的情况下取消注册.Net组件

时间:2013-06-05 08:57:13

标签: .net com components

我更新了自定义.Net组件,但忘记先取消注册以前的版本。

我没有取消注册,而是在旧版本上复制了新的dll。

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

我猜旧的组件信息仍然存在于注册表或系统的其他位置。有没有办法在没有实际dll的情况下删除/卸载/取消注册这些信息?

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

是否有其他方法可以从系统中删除旧版本信息并仅注册新的dll?

谢谢!

1 个答案:

答案 0 :(得分:1)

忘记取消注册程序集只会在注册表中留下垃圾。这很邋and,很难摆脱,但肯定不是世界末日。许多旧机器都有很多像这样的垃圾,这是注册表清洁工自称要摆脱的那种垃圾。这不是对btw等工具的认可。

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

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

然而,在项目稳定并且即将发货之后,您应该再次删除这些[Guid]属性。不这样做就会调用DLL Hell,没什么好乱的。

Regasm.exe / regfile选项值得注意。您可以查看正在使用的注册密钥。