以下是错误详细信息:
在错误列表中:
错误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。这看起来像是大锤子,小钉子。有没有解决的办法(例如仅以管理员身份运行的方式)?
很遗憾,没有简单的方法可以做到这一点。默认情况下,注册组件会将条目添加到注册表中受保护的密钥中(特别是在HKLM下)。没有管理权限就无法做到这一点。
从技术上讲,可以使用HKCU下的等效键将COM组件注册为非管理员。但是,这并不是一个小小的变化,并且我不认为可以将注册程序集的.Net工具配置为执行此操作。
我认为您最好的选择是在构建期间禁用注册。然后打开一个单独的“管理”窗口,您可以在其中手动注册DLL From,以进行调试。仅当您更改与COM相关的接口或DLL的位置时,才真正需要重新注册,因此不必对每个F5都进行重新注册。
关闭Visual Studio并重新打开鼠标右键->以管理员身份运行为我解决了此问题。
我在Visual Studio 2017中也遇到了同样的问题。
JaredPar's answer使我实现了此实现:
Register for COM interop
screenshotfor /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)弹出窗口,要求您确认后才能运行)。
注意:
; sleep 2
(或改用; pause
。