Visual Studio - TYPE_E_REGISTRYACCESS

19
我正在构建我的 Visual Studio 解决方案,在输出窗口中只有一个项目出现了错误。
在错误选项卡中:
Error   161 Cannot register type library "D:\Sites\Website\MyPortal.Website.Controllers\bin\Debug\MyPortal.Website.Controllers.tlb". Error accessing the OLE registry. (Exception from HRESULT: 0x8002801C (TYPE_E_REGISTRYACCESS)) MyPortal.Website.Controllers

在输出选项卡中:

Compile complete -- 0 errors, 153 warnings
  MyPortal.Website.Controllers -> D:\Sites\Website\MyPortal.Website.Controllers\bin\Debug\MyPortal.Website.Controllers.dll
c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(3341,9): warning MSB3214: "D:\Sites\Website\MyPortal.Website.Controllers\bin\Debug\MyPortal.Website.Controllers.dll" does not contain any types that can be registered for COM Interop.
c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(3341,9): error MSB3213: Cannot register type library "D:\Sites\Website\MyPortal.Website.Controllers\bin\Debug\MyPortal.Website.Controllers.tlb". Error accessing the OLE registry. (Exception from HRESULT: 0x8002801C (TYPE_E_REGISTRYACCESS))
========== Rebuild All: 8 succeeded, 1 failed, 0 skipped ==========

有什么想法吗?


1
你以管理员身份运行Vs2010吗? - rene
1
不需要以管理员身份运行。 - Junior Mayhé
如果您需要为COM互操作注册已编译的程序集,那么您是否需要以管理员身份运行? - Tetsujin no Oni
@JuniorMayhé,当您需要注册COM互操作的Excel Add-In时,您的答案并不是解决方案。不幸的是,Rory的方法对我也没有起作用。 - Jeremy Thompson
4个回答

39

当设置注册COM互操作 时,我发现您需要以管理员身份运行。

如果没有管理员权限尝试编译,您会收到以下错误:

无法注册程序集“C:\ TFS \ Project \ Src \ ProjectAddin \ bin \ Debug \ ProjectAddin.dll”-访问被拒绝。请确保您以管理员身份运行应用程序。访问注册表键 'HKEY_CLASSES_ROOT \ CLSID {3A6192EA-3C9C-39EB-99A3-3DBFF8CA118F}' 被拒绝。

上述注册表键不存在,因此我创建了它,然后尝试编译,结果出现了以下错误:

无法注册类型库“C:\ TFS \ Project \ Src \ ProjectAddin \ bin \ Debug \ ProjectAddin.tlb”。访问OLE注册表时出错。(HRESULT 异常:0x8002801C(TYPE_E_REGISTRYACCESS))

解决方案

关闭注册COM互操作,错误就消失了,或者更好的解决方法:

按住Shift键并右键单击Visual Studio,以管理员身份打开项目。勾选注册COM互操作,然后成功编译。


2
大家好,这是我找到的方法,请理解这是一回事:http://stackoverflow.com/questions/10875278/vsto-add-ins-comaddins-and-requestcomaddinautomationservice - Jeremy Thompson
1
对我来说,以管理员模式运行Visual Studio解决了这个问题。我不再收到错误信息了。谢谢@Jeremy! - Daniel
很高兴能帮到你,@Daniel。给有帮助的答案点赞真是太酷了。 - Jeremy Thompson

25

我发现有人在 csproj 中更改了属性。

为解决错误:

  • 您只需要右键单击项目,
  • 选择 构建 选项卡
  • 进入 输出 部分
  • 取消选中 注册 COM 互操作

3
这个解决方案可能会破坏构建过程,因为它将停止COM互操作注册。 - Melllvar
我已经取消了“注册COM互操作”,但错误仍然存在... 我正在使用Team Build 2010... 有任何想法吗? - pabloide86
请以管理员身份运行VS,@pabloide86。 - user8421235
勾选“注册 COM 互操作”是有意为之的,以便注册 COM 互操作。 - Rahul Sutar

11

对我来说,这个问题是在我更换到Win7 x64机器后开始的。我有其他团队成员没有x64,所以我认为这就是问题所在。我需要使用COM互操作性,所以不能只是关闭它。我能够通过取消注册COM互操作(在项目属性>生成页面中),然后添加后构建事件来解决该问题,从而进行COM注册。

"%Windir%\Microsoft.NET\Framework\v2.0.50727\regasm" /codebase "$(TargetPath)"

这对我有用。因为我也需要com,并且我正在X64机器上构建。 - Anand
这个想法不错,但对我没用,我会发表我的解决方案。 - Jeremy Thompson

3

由于在您的项目中启用了“注册COM互操作”设置,因此在构建时执行相同的操作。除非您显式地以管理员身份启动Visual Studio,否则此设置需要管理员特权,而在Visual Studio下不可用。

您可以按照以下链接中提供的步骤以管理员身份启动Visual Studio,然后尝试重新构建项目 -

如何默认以管理员身份运行Visual Studio


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接