gpt4 book ai didi

java - 如何在 C# .NET Core 6 中使用 Java .dll?

转载 作者:行者123 更新时间:2023-12-05 01:24:38 28 4
gpt4 key购买 nike

初始情况

我今天对我的项目进行了一些测试 - 目标:将 .jar 文件作为 .dll 实现到 C# 项目中>。我当前的 .java/.jar 文件如下所示。

package ws;

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

我用 IKVM 成功地将上面的转换为 .dll (版本:7.5.0.2)。

我现在想在我的 C# 项目中引用这个 .dll 并调用 Add(int a, int b) 方法。我已经像这样添加了引用:

enter image description here

无论如何我都无法调用该方法,因为编译器找不到.dll 引用..

using Adding; // <= Compiler Error CS0246 (Can't find the reference)

Console.WriteLine(Add(1, 2));

有人知道我怎样才能做到这一点吗?我非常感谢任何形式的帮助,干杯!


编辑 1:反编译

我已经按照评论中的要求用ILSpy 反编译了.dll。 (版本:ILSpy 7.2),结果为以下输出。

// C:\Users\maikh\Desktop\Adding.dll
// Adding, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// Global type: <Module>
// Architecture: AnyCPU (64-bit preferred)
// Runtime: v4.0.30319
// Hash algorithm: SHA1

using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using IKVM.Attributes;

[assembly: Debuggable(true, false)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: SourceFile(null)]
[module: JavaModule(Jars = new string[] { "Adding.jar" })]
[module: PackageList(new string[] { })]

我在反编译.dll时也找到了一些引用。我不知道这是否重要,但无论如何我都会提供。

// Detected TargetFramework-Id: .NETFramework,Version=v4.0
// Detected RuntimePack: Microsoft.NETCore.App

// Referenced assemblies (in metadata order):
// IKVM.Runtime, Version=7.5.0.2, Culture=neutral, PublicKeyToken=00d957d768bec828
// Assembly reference loading information:
// There were some problems during assembly reference load, see below for more information!
// Error: Could not find reference: IKVM.Runtime, Version=7.5.0.2, Culture=neutral, PublicKeyToken=00d957d768bec828

// mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// Assembly reference loading information:
// Info: Success - Found in Assembly List



// Assembly load log including transitive references:
// IKVM.Runtime, Version=7.5.0.2, Culture=neutral, PublicKeyToken=00d957d768bec828
// Error: Could not find reference: IKVM.Runtime, Version=7.5.0.2, Culture=neutral, PublicKeyToken=00d957d768bec828

// mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// Info: Success - Found in Assembly List

编辑 2:反编译 V2

我已经设法添加了缺少的引用 IKVM.Runtime。尽管如此,我找不到任何关于命名空间、类或方法的信息。

enter image description here

最佳答案

首先,您将类用作命名空间,这可能是不正确的。您的方法调用可能看起来像这样:

var adder = new Adding();
Console.WriteLine(adder.Add(1, 2));

如果那行不通,我会 inspect the produced dll验证它是一个符合标准的 .net dll。这还应该显示命名空间、类名和其他信息。像 dotPeek 或 ilSpy 这样的反编译器可能会以更易于阅读的格式显示相同的信息。

关于java - 如何在 C# .NET Core 6 中使用 Java .dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71339714/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com