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

Linux环境下Java调用C#的可行实现方案咨询

Linux环境下Java调用C#的实用方案

当然有,给你几个比转C代码靠谱得多的可行方案:

1. 直接用.NET Core/.NET 6+编译成.so共享库

从.NET Core 3.0开始,C#支持直接编译为Linux原生的.so共享库,完全不用转C代码,步骤很简单:

  • 新建一个.NET类库项目,在项目文件里设置<OutputType>Native</OutputType>
  • 要暴露给Java调用的方法,用[UnmanagedCallersOnly(EntryPoint = "方法名")]标记,参数要用非托管兼容类型(比如int、string*,避免用.NET特有的类型)
  • 执行命令dotnet publish -r linux-x64 -c Release,就能在输出目录拿到.so文件
  • 之后Java用JNA直接调用这个.so,和调用普通C写的共享库完全一样

C#示例代码:

using System.Runtime.InteropServices;

public static class NativeApi
{
    [UnmanagedCallersOnly(EntryPoint = "calculate_sum")]
    public static int CalculateSum(int num1, int num2)
    {
        return num1 + num2;
    }
}

Java JNA调用示例:

import com.sun.jna.Library;
import com.sun.jna.Native;

public interface CSharpNativeLib extends Library {
    CSharpNativeLib INSTANCE = Native.load("YourLibraryName", CSharpNativeLib.class);
    
    int calculate_sum(int num1, int num2);
}

public class Main {
    public static void main(String[] args) {
        int result = CSharpNativeLib.INSTANCE.calculate_sum(10, 20);
        System.out.println("计算结果:" + result);
    }
}

2. 用gRPC做跨进程通信

如果嫌原生调用的内存管理麻烦,或者需要更复杂的交互,用gRPC是个好选择:

  • 写一个.proto文件定义你需要的服务和接口
  • 分别用gRPC工具生成Java客户端和C#服务端的代码
  • 启动C#的gRPC服务,Java端作为客户端直接调用接口
  • 这种方式完全跨平台,不用管原生库的兼容性,逻辑复杂的场景也能hold住

3. 封装成HTTP REST接口

简单场景下,直接把C#代码做成ASP.NET Core Web API,Java用HttpClient发HTTP请求调用就行。实现成本极低,不用依赖任何特殊工具,适合轻量的功能调用。

4. 用IKVM在JVM上运行.NET代码

IKVM可以把.NET程序集编译成Java字节码,或者直接在JVM上加载运行.NET代码。不过这个项目的活跃度不如前几个方案,更适合老.NET项目的迁移需求,新项目优先考虑前面的方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:37:17