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

如何在没有实际dll的情况下注销.Net组件,.net,com,components,.net,Com,Components,我更新了自定义.Net组件,但忘记先注销以前的版本 我没有注销,而是在旧版本上复制了新的dll 组件暴露于COM,现在我在经典ASP页面上收到“无法创建对象”消息 我猜旧的组件信息会保留在注册表或系统中的某个地方。有没有办法在没有实际dll的情况下删除/卸载/注销这些信息 我尝试了Regasm工具来注销组件,但现在我只能提供新dll的路径,因为旧的dll被覆盖了 有没有其他方法可以从系统中删除旧版本信息并只注册新的dll 谢谢 忘记注销程序集只会在注册表中留下垃圾。这是草率的,很难摆脱,但肯定不

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

我没有注销,而是在旧版本上复制了新的dll

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

我猜旧的组件信息会保留在注册表或系统中的某个地方。有没有办法在没有实际dll的情况下删除/卸载/注销这些信息

我尝试了Regasm工具来注销组件,但现在我只能提供新dll的路径,因为旧的dll被覆盖了

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


谢谢

忘记注销程序集只会在注册表中留下垃圾。这是草率的,很难摆脱,但肯定不是世界末日。许多较旧的机器都有很多这样的垃圾,注册中心清洁工声称要清除的垃圾。顺便说一句,这不是对那种工具的认可

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

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

但是,在项目稳定并即将发布后,您应该再次删除这些[Guid]属性。不这样做会调用DLL地狱,没什么好搞的


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

可能是Hi Hans的副本,谢谢您的回答。我并没有更改任何GUID,所以在这种情况下,组件应该在不重新注册的情况下工作?那可能是权限问题。无论如何,我得到“80070002系统找不到指定的文件”。你处理过这个错误吗?:)“找不到文件”肯定是一个非常常见的错误。如果您不知道是什么原因导致它,那么使用SysInternals的ProcMon。你会看到它在寻找什么。