Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 注册程序集时出现错误MSB3216_Visual Studio_Visual Studio 2008_Com_Windows 7 - Fatal编程技术网

Visual studio 注册程序集时出现错误MSB3216

Visual studio 注册程序集时出现错误MSB3216,visual-studio,visual-studio-2008,com,windows-7,Visual Studio,Visual Studio 2008,Com,Windows 7,以下是错误详细信息: 在错误列表中: 错误1无法注册程序集C:\Users\cboardman\Documents\Visual Studio 2008\Projects\ExcelAddIn1\ExcelAddIn1\bin\Debug\ExcelAddIn1.dll-访问被拒绝。请确保您以管理员身份运行应用程序。对注册表项“HKEY\U CLASSES\U ROOT\ExcelAddIn1…”的访问被拒绝。C:\Windows\Microsoft.NET\Framework\v3.5\Mic

以下是错误详细信息:

在错误列表中:

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

在生成输出中:

目标非托管注册: C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets3019,9:错误MSB3216:无法注册程序集C:\Users\cboardman\Documents\Visual Studio 2008\Projects\ExcelAddIn1\ExcelAddIn1\bin\Debug\ExcelAddIn1.dll-访问被拒绝。请确保您以管理员身份运行应用程序。对注册表项“HKEY\U CLASSES\U ROOT\ExcelAddIn1…”的访问被拒绝。 已完成在项目ExcelAddIn1.csproj中生成目标非托管注册-失败


根据我在网上找到的信息,我需要以管理员身份运行VisualStudio。这好像是一把大锤子敲小钉子。有没有一种方法可以解决这个问题,比如只运行管理员注册?

不幸的是,没有一种简单的方法可以做到这一点。默认情况下,注册组件会将条目添加到HKLM下注册表中的受保护密钥中。没有管理权限,这是不可能做到的

在技术上,可以使用HKCU下的等效密钥将COM组件注册为非管理员。但是,这不是一个微不足道的更改,我不相信注册程序集的.Net工具可以配置为这样做


我认为您最好的选择是在构建期间禁用注册。然后打开一个单独的管理窗口,您可以从中手动注册DLL以进行调试。只有当您更改COM相关接口或DLL位置时,才真正需要重新注册,这样就不必为每一个F5执行此操作。

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

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

让我实现了以下目标:

转到项目的属性 选择构建 取消COM互操作的注册 选择生成事件 添加生成后事件命令行: 在下拉列表中,运行生成后事件:选择:成功生成 运行构建 在构建结束时,您将看到一个powershell窗口以管理员身份运行,具体取决于您的设置。您可能会看到一个用户帐户控制UAC弹出窗口,要求您在运行之前进行确认

注:

这将找到最新的.NET framework版本,并从那里使用regasm。 提高效率;睡眠2如果您想更长时间地查看输出以确认注册或使用;停下来。
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"