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

如何在ASP.NET Core 3.1中调用Java代码,解决jni4net运行报错

解决方案

报错根因

你遇到的MissingMethodException是因为jni4net 0.8.8.0基于.NET Framework开发,依赖的System.AppDomain.DefineDynamicAssemblyAPI在.NET Core 2.1及更高版本中已被移除,因此无法直接在.NET Core 3.1环境下运行。


方案1:绕过当前报错

  • 降级运行时到.NET Framework:将项目目标框架调整为.NET Framework 4.8,同时将项目改为基于.NET Framework的ASP.NET项目,即可直接复用你已验证过的jni4net桥接代码,改造成本最低。
  • 替换适配.NET Core的jni4net分支:部分社区fork的jni4net版本已经适配了.NET Core的动态程序集生成接口,替换官方0.8.8.0版本的依赖包后即可正常调用,无需大幅修改现有代码。

方案2:替代Java调用方案

如果不想调整.NET版本,可以选择以下无需jni4net的互操作方案:

进程调用

将Java逻辑打包为可执行jar包,在ASP.NET Core中通过进程调用来执行,通过标准输入输出传递数据,适合调用频率低、逻辑简单的场景,示例代码如下:

using System.Diagnostics;

public string CallJavaService(string param1, string param2)
{
    var startInfo = new ProcessStartInfo
    {
        FileName = "java",
        Arguments = $"-jar your-java-package.jar {param1} {param2}",
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };
    using var process = Process.Start(startInfo);
    string result = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    return result;
}

HTTP服务封装

将Java代码封装为独立的HTTP接口,可使用轻量Java Web框架快速实现,ASP.NET Core通过HTTP请求调用该接口即可。该方案兼容性最好,支持跨平台部署、独立扩容,是生产环境的首选方案,仅需额外维护一个Java服务。

手动JNI封装

如果对性能要求极高,可以基于.NET Core支持的JNI接口手动写绑定代码,或者使用商用互操作库完成桥接,不过改造成本较高,适合对延迟要求非常严苛的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:24:01