gpt4 book ai didi

c# - 使用 "Register for COM Interop"与 "regasm.exe xxxx.dll/tlb:xxxx.tlb"的区别?

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:27 26 4
gpt4 key购买 nike

谁能解释一下“Register for COM Interop”与 “regasm.exe xxxx.dll/tlb:xxxx.tlb” 之间的区别。

根据我的理解,“Register for COM Interop”会生成一个 .tlb 文件,“regasm.exe xxxx.dll/tlb:xxxx.tlb”也会生成一个 .tlb 文件。我们需要同时使用这两种东西还是任何一种都可以生成 tlb 文件。

最佳答案

这是一种便利,旨在使开发和调试库时尽可能轻松地做到这一点,而无需手动运行 Regasm。它做的事情与 Regasm.exe/codebase/tlb 做的完全一样。/codebase 确保不必将程序集放在 GAC 中,/tlb 确保您拥有最新的类型库以用于客户端或测试代码。两者在开发机器上都很重要,而不是在用户机器上。

但是有两件事是程序员在手动运行 Regasm 时经常忽略的。您不能忘记使用它,何时需要重新注册并不总是很明显。最重要的是,它执行 Regasm.exe/unregister 所做的事情,以确保在构建新版本之前自动注销旧版本的库。很容易被忽视,由此造成的注册表污染事后清理起来并不好。

当您在接口(interface)、类和 AssemblyInfo.cs 上显式应用 [Guid] 属性时,它的重要性就会降低很多,因为注册表项是相同的。但是,只有在需要开发现有 COM 服务器的直接替代品时才应该这样做。 [Guid] 属性是神圣的,良好的 COM 实践要求在您对库的公共(public)接口(interface)进行更改时更改它。不这样做很可能导致 DLL Hell。当缺少 [Guid] 时,CLR 会自动处理此问题。

一个缺点是,您必须运行提升的 VS,以便它可以写入注册表。

关于c# - 使用 "Register for COM Interop"与 "regasm.exe xxxx.dll/tlb:xxxx.tlb"的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46076436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com