为何C# DLL在Excel 2007注册可用但Excel 2021提示未注册?
解决Excel 2021中C# COM DLL提示未注册的问题
你编写的C# COM DLL代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Excel = Microsoft.Office.Interop.Excel; namespace Hello { public class HelloWorld { public String HelloUser(string name) { return "Hello " + name; } } }
该DLL在Excel 2007中正常使用,但Excel 2021提示未注册,可按以下步骤解决:
匹配Excel与DLL的位数
- 查看Excel 2021位数:打开Excel,依次点击「文件>账户>关于Excel」,确认是32位还是64位。
- 重新编译DLL:在Visual Studio中打开项目,进入「项目属性>生成>平台目标」,选择与Excel一致的位数(x86对应32位,x64对应64位),重新生成DLL。
以管理员权限重新注册DLL
打开管理员权限的命令提示符,根据位数选择对应版本的regasm.exe执行注册命令:- 32位环境:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe YourDllName.dll /codebase /tlb - 64位环境:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe YourDllName.dll /codebase /tlb
替换
YourDllName.dll为你的实际DLL文件名,/codebase参数会在注册表中记录DLL路径,/tlb参数生成类型库帮助Excel识别组件。- 32位环境:
调整Excel 2021的安全设置
- 打开Excel,依次点击「文件>选项>信任中心>信任中心设置」。
- 进入「宏设置」,勾选「启用所有宏(测试时使用,后续可调整为更安全的选项)」。
- 进入「受信任位置」,添加你的DLL所在文件夹,将其设为受信任目录。
为DLL添加强名称签名(可选)
Excel 2021的安全策略更严格,未签名的COM组件可能被拦截:- 在Visual Studio项目属性中,进入「签名」选项卡。
- 勾选「为程序集签名」,选择或创建一个强名称密钥文件。
- 重新生成DLL后,再执行注册步骤。
内容的提问来源于stack exchange,提问作者Shark SirShark
相关产品推荐
相关产品推荐

