使用RegAsm.exe注册.NET 8 DLL遇System.Runtime加载错误求助
解决方案
1. 替换为.NET 8专属的dotnet regasm命令
你之前用的RegAsm.exe是针对.NET Framework的工具,无法正确识别.NET 8程序集的依赖结构,这才导致了System.Runtime加载错误。改用.NET SDK自带的dotnet regasm命令就能解决这个问题:
- 以管理员身份打开命令提示符
- 直接执行(替换为你的DLL路径):
如果是64位程序集,需额外添加平台参数:dotnet regasm "你的程序集路径\YourAssembly.dll" /codebase
这个命令会自动调用.NET 8的运行时环境,直接加载dotnet regasm "你的程序集路径\YourAssembly.dll" /codebase /platform:x64C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.1\下的实际运行时程序集,不会再触发"引用程序集无法执行加载"的错误。
2. 处理无强名称的警告
/codebase搭配无强名称程序集的警告只是安全提示,本地单机器使用时,只要不存在同名程序集冲突,完全可以忽略。
如果想彻底消除警告,生成强名称的操作其实很简单,并不耗时:
- 打开项目的
.csproj文件,添加以下配置:<PropertyGroup> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>YourKey.snk</AssemblyOriginatorKeyFile> </PropertyGroup> - 用命令生成密钥文件:
sn -k YourKey.snk - 重新编译项目,得到带强名称的程序集后再执行
dotnet regasm,警告就会消失。
3. 确认SDK安装
确保你的机器上安装了**.NET 8 SDK**(仅Runtime不够),因为dotnet regasm是SDK的组成部分。如果未安装,直接下载对应版本的SDK包即可。
关键提示
你找到的C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.1\ref\net8.0\System.Runtime.dll是编译引用程序集,仅用于代码编译阶段,不能被执行加载。实际运行时依赖的程序集都在C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.1\目录下,dotnet regasm会自动识别这个路径。
内容的提问来源于stack exchange,提问作者Shemesh
相关产品推荐
相关产品推荐

