加载C#编译DLL至Matlab时System.Runtime加载失败求助
解决Matlab加载.NET 7类库DLL时缺失System.Runtime的问题
编译层面调整
- 优先切换到.NET Framework目标框架:将项目目标框架改为.NET Framework 4.8(或Matlab支持的更高版本,可通过Matlab的
version -modules命令查看兼容版本)。.NET Framework的核心依赖是全局注册的,Matlab加载时不会出现缺失问题。修改方式:右键项目→属性→应用→目标框架,选择对应的.NET Framework版本。 - 若必须使用.NET 7,发布为自包含部署包:
- 右键项目→发布,选择文件夹发布目标。
- 在发布设置中,将部署模式设为「自包含」,目标运行时选择与Matlab位数匹配的版本(如win-x64)。
- 发布后,将输出目录下的所有文件(包括主DLL、依赖库及runtime文件夹)复制到Matlab可访问的路径下,再尝试加载。
- 清理不必要的NuGet依赖:移除项目中手动添加的System.Runtime NuGet包,.NET 7中System.Runtime属于框架核心组件,使用框架引用即可。可检查项目文件(.csproj),确保只有
<FrameworkReference Include="Microsoft.NETCore.App" />,无<PackageReference Include="System.Runtime" />。
运行时/Matlab配置优化
- 确认Matlab的.NET兼容性:在Matlab命令行输入
version -modules,查看支持的.NET版本。若Matlab版本过旧不支持.NET 7,需升级Matlab至R2022a及以上版本,或切换到兼容的.NET Framework。 - 添加Matlab绑定重定向配置:
在Matlab安装目录的根文件夹(或你的DLL所在目录)创建matlab.exe.config文件,写入以下内容(替换路径中的实际.NET 7运行时版本):<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" /> <codeBase version="7.0.0.0" href="C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.15\System.Runtime.dll" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> - 确保依赖文件路径正确:将.NET 7运行时目录下的System.Runtime.dll及相关依赖(如System.Private.CoreLib.dll)复制到DLL所在目录,或通过配置文件的
codeBase指定绝对路径。
验证步骤
- 执行
dotnet --list-runtimes确认.NET 7运行时已安装,且位数与Matlab一致(64位)。 - 用ILSpy检查DLL的依赖项:若为自包含部署,DLL应指向本地的依赖文件而非全局框架;若使用.NET Framework,依赖应显示为.NET Framework的核心组件。
- 在Matlab中执行
NET.addAssembly('完整的DLL路径'),确保路径无拼写错误,且文件权限正常。
内容的提问来源于stack exchange,提问作者eisbaersalat
相关产品推荐
相关产品推荐

