34

regtlibv12.exe我在分区上全新安装了 Windows 8,安装了 Visual Studio 11/2012 Professional,但在里面找不到C:\Windows\Microsoft.NET\Framework\v4.0.30319.

下面是我的 Windows 7 分区的屏幕截图,带有 .Net 4.0(和 regtlibv12):

视窗 7 - .Net 4

下面是带有 .Net 4.5(并且没有 regtlibv12)的 Windows 8:

视窗 8 - .Net 4.5

regtlibv12不再是 .Net 框架的一部分了吗?我还需要安装 .Net 4.0 吗?如果我在 4.5 之上安装 .Net 4.0 会发生什么?我知道它们都位于硬盘驱动器上的同一位置,并且 4.5 有效地覆盖了 4.0,并且 Windows 8 上默认使用 4.5。我是否需要安装 4.0,然后重新安装 4.5 才能恢复 regtlibv12

谢谢

4

2 回答 2

41

它从来都不是框架的一部分。它是完全无证的。然而,有一个非常一致的谣言,很多程序员在他们的 v2.0.50727 或 v4.0.30319 目录中找到了它,并认为它可以解决注册问题。很多论坛帖子都提到了。

它在这些文件夹中显示的确切方式很难进行逆向工程,我看到的唯一模式是当您自己安装框架时它就会出现。并且当框架预装在机器上时不会出现。这有点道理,框架目录中有几个 .tlb 文件需要注册。它们包含客户端代码可能依赖的 .NET [ComVisible] 类型的类型信息。注册类型库的常规方式不适用于那些 .tlb 文件,因为它们没有嵌入到常规 COM 服务器中。额外的猜测是,在预安装的 .NET 版本中不需要该工具,因为注册信息已汇总到常规 Windows 设置中。

如果您已经依赖该工具,那么除了从另一台机器复制 .exe 之外,您将无能为力。或者解决你需要从另一端使用它的原因,这样你就不再需要它了:

  • 这是忘记将 /tlb 选项与 Regasm.exe 一起使用的解决方法。当客户端代码尝试使用来自另一个线程的 COM 接口时,这可能会在运行时产生 TYPE_E_CANTLOADLIBRARY 错误。类型库提供标准编组器编组方法参数所需的类型信息。使用 /tlb 选项来解决这个问题。

  • 这是让 COM 服务器显示在 Project + Add Reference,COM 选项卡中的一种解决方法。该选项卡列出了已注册的类型库。然而,这不是一个合适的解决方法,除了在构建服务器上,您可以编译您的代码,但由于注册未完成,您无法运行它。正确的方法是使用作者提供的安装程序或在紧要关头使用 Regsvr32.exe,以便注册类型库和 CLSID 键。

  • 对于不注册其类型库的 COM 服务器,这是一种解决方法。与上面类似,但注册类型库是可选的,通常只需要在您的开发机器上,而不是在运行服务器的机器上。大多数可以使用类型库的工具都可以显式添加它们,而不是依赖于 TypeLib 注册表项。Visual Studio IDE 也是如此,您可以使用“浏览”选项卡直接选择 .tlb 文件。

于 2012-10-07T16:15:37.793 回答
6

请参阅 Hans 对所提出问题的出色回答;这个答案解释了如何获取上述可执行文件。

  1. 从https://www.7-zip.org/download.html安装 7-Zip
  2. 从https://github.com/activescott/lessmsi/releases下载 lessmsi/Less MSIérables

(或者你可以使用Chocolatey来安装以上两个:包名分别是7ziplessmsi。)

  1. 从https://www.microsoft.com/en-gb/download/details.aspx?id=17718下载 .NET Framework 4.0 独立安装程序
  2. 使用 7-Zip 打开dotNetFx40_Full_x86_x64.exe从上一步下载的文件netfx_Core_x64.msi,将文件解压缩netFxCore.mzz到临时目录
  3. 使用 lessmsi 打开netfx_Core_x64.msi,向下滚动文件列表并选择regtlibv12.exe(带有 Component =regtlibv12_exe_amd64的一个用于 x64 系统,另一个用于 x86,或者两者都需要),然后单击“提取”按钮
  4. 浏览并选择要将文件提取到的目录,单击确定
  5. 瞧,你现在有了regtlibv12.exe
  • 注意:我不是律师,不知道上述是否违反任何法律,如果这样做并给您带来麻烦,我也不承担责任。至少,不要再分发regtlibv12.exe(不管这样做是非法的,如果你认为你需要 - 你要么不这样做,要么你的软件有大问题)。
于 2020-06-04T11:32:10.560 回答