【问题标题】:Is there any possibility to use JAR Files in .NET?有没有可能在 .NET 中使用 JAR 文件?
【发布时间】:2022-01-02 17:41:57
【问题描述】:

初步情况

首先,我想解释一下我的问题的初始情况。我知道 Java 和 .NET 之间的不存在互操作性。我已经对这个主题进行了大量研究,但还没有找到合适的解决方案。无论如何,我相信有一个解决方案!

我正在创建一个需要访问 .jar 文件的 C# 库,或者更准确地说,它需要访问 Java 类。 C#中Java类的使用非常重要,因为我需要传入参数并等待结果。

示例

以下是一个非常简化的示例,说明了它应该如何理想地工作。请注意,偏差是受欢迎的,因为它们不能被排除在最终解决方案中。唯一重要的是我可以在 C# 中创建 Java 类的类实例。

calculation.java:

public class Calculation
{
    public int Add(Integer a, Integer b)
    {
        return a + b;
    }

    public int Subtract(Integer a, Integer b)
    {
        return a - b;
    }
}

entrypoint.cs:

// Implement / load the Java file
// like: using calculation;

public class Foo
{
    public string Bar()
    {
        // The original constructor of the class is of course in Java
        Calculation calc = new Calculation(); // Create class instance
        int res = calc.Add(5, 10); // Call method
    }
}

进展

首先,我尝试将.jar 文件直接集成/加载到 Visual Studio/C# 中,但我找不到类似的方法。

此外,我尝试使用IKVM8 将我的.jar 文件转换为.dll 文件(D动态 Link L ibrary),但开源项目不再维护,并且在此过程中我遇到了奇怪的错误。

另一种可能的解决方案是使用 JavaScript 创建类实例并将 JavaScript 实现到 C# 中,但如果可能的话,我认为这是一种非常不干净的方式。

目前我正在尝试通过Jni4net 再次将.jar 文件转换为.dll 文件。但是,我不知道如何使用它来将 .jar 文件转换为 .dll 文件。

我非常感谢任何建议,纯粹的!

【问题讨论】:

  • 这里有人建议将 jar 包装在 xamarin dll 中:stackoverflow.com/a/40802639/14865005
  • @T.Schwarz 非常感谢!我已经遇到过这个问题,但我不确定最后是否可以生成整个 C# 项目的 .dll。也许您对此了解更多?
  • 如果您可以在旁边运行 JVM,您需要能够要求它“实例化并运行它,将结果发送给我”。使用反射作为 REST 服务应该是可行的。或者其他一些远程调用机制。 corba 仍然存在吗?
  • @dratenik 哇,实际上是一个非常好的主意!我曾经为 C# 项目考虑过 REST 服务,但从未想过为 Java 事物本身构建 REST。确实是一个非常好的想法,并且可能比我的想法更平易近人

标签: java c# .net jar


【解决方案1】:

你应该看看 JNI(Java Native Interface),用它你可以从 C# 实例化 Java VM 并实例化和调用 Java 类。

【讨论】:

  • 首先非常感谢您! :) 正如我所说,我尝试使用 jni4net,但不知道如何用它翻译我的 .jar 文件。有什么想法可以做到吗?
  • 啊,“转换”位让我明白了,使用 JNI 你不会转换 JAR,而是按原样使用它们。我看到 JNI4net 确实有一些方便的 c# 代理生成工具,可以处理参数类型转换的细节。
猜你喜欢
  • 2014-07-26
  • 2021-03-10
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多