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 ==========

有任何想法吗?

4

4 回答 4

38

设置时Register For Com interop 我发现您确实需要以管理员身份运行。

在没有管理员尝试编译的情况下,我得到了如下错误:

无法注册程序集“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))

解决方案

关闭 Register for COM interop 并且错误消失,或者更好的解决方案:

Shift + 右键单击​​ Visual Studio 并以管理员身份打开,打开项目。勾选 Register for Com interop,编译成功。

于 2012-06-04T23:02:58.420 回答
24

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

要解决错误:

  • 您只需右键单击该项目,
  • 选择构建选项卡
  • 转到输出部分
  • 取消选中注册 COM 互操作
于 2011-02-25T08:42:50.643 回答
10

对我来说,这个问题是从我搬到 Win7 x64 机器时开始的。我有其他没有 x64 的团队成员,所以我认为这是问题所在。我需要 COM 互操作,所以不能把它关掉。我能够通过取消选中 Register for COM interop(在项目属性 > 构建页面中)来解决问题,然后添加一个构建后事件来进行 COM 注册:

"%Windir%\Microsoft.NET\Framework\v2.0.50727\regasm" /codebase "$(TargetPath)"
于 2011-07-21T15:00:26.963 回答
3

因为,在您的项目中,您已启用注册 COM 互操作设置,因此在构建时执行相同操作。此设置需要在 Visual Studio 下不可用的管理员权限,除非您以管理员身份显式启动 Visual Studio。

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

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

于 2016-11-03T09:18:08.240 回答