You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1项目引用VB编写的DLL运行加载类型报错如何解决

报错原因

你调用的VB DLL是基于.NET Framework编译的,依赖.NET Framework原生Microsoft.VisualBasic程序集中的Microsoft.VisualBasic.Devices.Computer类型,.NET Core 3.1自带的Microsoft.VisualBasic兼容包没有完整实现该类型,且.NET Core不支持Microsoft.CodeDom.Providers.DotNetCompilerPlatform这类Framework专属的编译器包,才会出现加载失败的问题。

解决方案

方案1:安装官方兼容包并配置绑定重定向(优先尝试)

  • 首先通过NuGet安装Microsoft.VisualBasic官方兼容包,选择匹配.NET Core 3.1的10.0.3及以上版本即可
  • 打开项目根目录下的*.runtimeconfig.json文件,添加如下配置,允许加载.NET Framework编译的程序集:
{
  "runtimeOptions": {
    "configProperties": {
      "System.Runtime.Loader.AllowDefaultAssemblies": true
    },
    "additionalProbingPaths": [
      "你存放VB DLL的本地绝对路径"
    ]
  }
}
  • 若仍报程序集版本不匹配,在项目.csproj文件中开启自动绑定重定向:
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.VisualBasic" Version="10.0.3" />
  </ItemGroup>
</Project>

方案2:COM互操作调用(方案1无效时使用)

无需修改原VB DLL,将其注册为COM组件后通过COM互操作调用,绕开.NET运行时的程序集加载校验:

  • 在部署服务的设备上用管理员权限执行命令:regsvr32 你的VB DLL的完整路径
  • 回到.NET Core项目添加对应COM组件的引用,直接调用目标函数即可,无需依赖.NET Framework版Microsoft.VisualBasic程序集。

方案3:.NET Framework代理服务兜底

如果前两个方案都不生效(比如原VB DLL依赖了更多.NET Framework专属Win32 API),可以单独搭建一个轻量的.NET Framework Web API作为代理服务,专门负责调用该VB DLL,你的.NET Core 3.1服务通过内网HTTP请求调用代理服务获取结果,完全规避跨运行时的程序集兼容问题。

内容的提问来源于stack exchange,提问作者bitapn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:06:08