Win10中注册自定义.NET8 DLL失败:找不到System.Runtime程序集
问题分析与解决方案
核心问题
你使用的是**.NET Framework 4.8版本的Regasm.exe**来注册.NET 8编译的程序集,两者属于不同的.NET运行时生态,旧版Regasm无法识别.NET 8的核心依赖(如System.Runtime 8.0.0.0),导致加载失败。
解决方案
使用.NET 8原生注册工具
放弃旧版Regasm.exe,改用.NET 8自带的dotnet regasm命令,以管理员权限运行命令提示符或PowerShell,执行以下命令:dotnet regasm /codebase /tlb "C:\TestPrograms\ShellExtension\shellextension.dll"该工具会自动适配.NET 8运行时,正确加载所需依赖。
确认项目编译配置
- 确保你的DLL目标框架为
net8.0-windows(而非纯net8.0),Windows外壳扩展需要依赖Windows桌面运行时组件。 - 检查项目的COM可见性配置:
- 在项目属性中启用"使程序集COM可见";
- 给需要暴露为COM对象的外壳扩展类添加
[ComVisible(true)]和[Guid("你的唯一GUID")]特性,同时确保类继承自对应的外壳扩展接口(如IShellExtInit、IContextMenu等)。
- 确保你的DLL目标框架为
修正PowerShell脚本
如果你的注册脚本仍在调用旧版Regasm.exe,需修改脚本替换为dotnet regasm命令,示例如下:param([string]$assemblyPath) dotnet regasm /codebase /tlb $assemblyPath
额外注意事项
- 注册操作必须以管理员权限执行,否则会因权限不足导致注册表写入失败;
- 你的测试机已安装.NET 8运行时,满足依赖要求,无需额外安装;
- 若涉及x86/x64兼容问题,需确保编译的DLL架构与系统一致(你的系统是x64,保持默认x64编译即可)。
内容的提问来源于stack exchange,提问作者MC9000
相关产品推荐
相关产品推荐

