注册程序集时出现错误MSB3216

问题描述 投票:11回答:3

以下是错误详细信息:

在错误列表中:

错误1无法注册程序集“ C:\ Users \ cboardman \ Documents \ Visual Studio 2008 \ Projects \ ExcelAddIn1 \ ExcelAddIn1 \ bin \ Debug \ ExcelAddIn1.dll”-访问被拒绝。请确保您以管理员身份运行该应用程序。拒绝访问注册表项“ HKEY_CLASSES_ROOT \ ExcelAddIn1 ...”。 C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets 3019 9 ExcelAddIn1

在构建输出中:

目标非托管注册:C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets(3019,9):错误MSB3216:无法注册程序集“ C:\ Users \ cboardman \ Documents \ Visual Studio 2008 \ Projects \ ExcelAddIn1 \ ExcelAddIn1 \ bin \ Debug \ ExcelAddIn1.dll”-访问被拒绝。请确保您以管理员身份运行该应用程序。拒绝访问注册表项“ HKEY_CLASSES_ROOT \ ExcelAddIn1 ...”。项目“ ExcelAddIn1.csproj”中的构建目标“ UnmanagedRegistration”完成-失败。

根据我在网上找到的信息,我需要以管理员身份运行Visual Studio。这看起来像是大锤子,小钉子。有没有解决的办法(例如仅以管理员身份运行的方式)?

visual-studio visual-studio-2008 com windows-7
3个回答
9
投票

很遗憾,没有简单的方法可以做到这一点。默认情况下,注册组件会将条目添加到注册表中受保护的密钥中(特别是在HKLM下)。没有管理权限就无法做到这一点。

从技术上讲,可以使用HKCU下的等效键将COM组件注册为非管理员。但是,这并不是一个小小的变化,并且我不认为可以将注册程序集的.Net工具配置为执行此操作。

我认为您最好的选择是在构建期间禁用注册。然后打开一个单独的“管理”窗口,您可以在其中手动注册DLL From,以进行调试。仅当您更改与COM相关的接口或DLL的位置时,才真正需要重新注册,因此不必对每个F5都进行重新注册。


5
投票

关闭Visual Studio并重新打开鼠标右键->以管理员身份运行为我解决了此问题。


0
投票

我在Visual Studio 2017中也遇到了同样的问题。

JaredPar's answer使我实现了此实现:

  • 转到项目的属性
  • 选择构建
  • 取消勾选Register for COM interop screenshot
  • 选择构建事件
  • 添加构建后事件命令行:
for /f %%a in ('dir %windir%\Microsoft.Net\Framework\regasm.exe /s /b') do set current_regasm="%%a"
set command=%current_regasm% $(TargetPath) /tlb:$(TargetDir)\$(TargetName).tlb /codebase ^; sleep 2
set elevated_command="Start-Process PowerShell.exe -Wait -ArgumentList \"-ExecutionPolicy Bypass -Command %command%\"
powershell -noprofile -ExecutionPolicy Bypass -Command %elevated_command% -Verb RunAs"
  • 在下拉run the post-build event:中选择:On successful build screenshot
  • 运行构建

在构建结束时,您将看到一个以管理员身份运行的Powershell窗口(根据您的设置,您可能会弹出一个用户帐户控制(UAC)弹出窗口,要求您确认后才能运行)。

注意:

  • 这将找到最新的.NET Framework版本,并从那里使用regasm(信用:Scott C)。
  • 如果想要更长的时间查看输出以确认注册,请增加; sleep 2(或改用; pause
© www.soinside.com 2019 - 2024. All rights reserved.