ASP.NET Core 2 API调用VB.NET程序集时出现TypeLoadException问题求助
解决TypeLoadException: 无法加载Microsoft.VisualBasic.DateAndTime的问题
我之前处理过不少.NET Framework到.NET Core迁移的类似案例,你的问题挺典型的——旧VB.NET程序集依赖传统.NET Framework下的Microsoft.VisualBasic类型,而ASP.NET Core的运行时环境和.NET Framework存在差异,导致类型加载失败。下面是一步步的解决思路:
1. 安装适配.NET Core的Microsoft.VisualBasic NuGet包
在.NET Core项目中,Microsoft.VisualBasic不是默认内置的,必须手动安装对应的NuGet包来提供兼容的类型实现:
- 打开NuGet包管理器,搜索
Microsoft.VisualBasic并安装(选择和ASP.NET Core 2.x兼容的稳定版本,比如10.3.0系列) - 或者用CLI命令快速安装:
Install-Package Microsoft.VisualBasic -Version 10.3.0
2. 尝试将项目目标框架切换为.NET Framework(Windows环境适用)
如果你的项目只需要在Windows环境运行,ASP.NET Core 2支持将目标框架设置为.NET Framework 4.x(比如4.6.1及以上),这样能大幅提升对旧.NET Framework程序集的兼容性:
- 编辑项目的
.csproj文件,把<TargetFramework>节点修改为:
重新加载项目后,运行时会使用.NET Framework的CLR,能更好地适配旧VB程序集的依赖。<TargetFramework>net461</TargetFramework>
3. 添加程序集绑定重定向
如果切换目标框架后仍有问题,或者必须使用.NET Core运行时,需要通过绑定重定向确保加载正确版本的Microsoft.VisualBasic:
- 在项目的
app.config(或web.config)中添加以下配置:
注意将<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.VisualBasic" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.3.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>newVersion替换为你实际安装的NuGet包版本号。
4. 排查程序集的深层依赖
如果以上方法都无效,可能是旧VB程序集还依赖其他.NET Framework特有的类型。你可以用ILDasm或dotnet dump工具查看程序集的依赖项,确认是否有其他缺失的类型,再针对性解决。
另外提一句:ASP.NET Core 2已经是比较老旧的版本了,如果项目允许,升级到.NET Core 3.1或更高版本,对旧程序集的兼容性会更好,但这可能需要调整项目的其他依赖配置。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

