Подтвердить что ты не робот

Как я могу назвать код .NET с Java?

Я не ищу обычный ответ, как веб-службы. Я ищу легкое решение для запуска на одной машине.

Изменить: я ищу способ в Java для вызова методов .NET

4b9b3361

Ответ 1

Я считаю, что Java может разговаривать с COM и .NET, может выставлять COM-интерфейсы. Так что это может быть очень легкое решение, которое не требует какой-либо третьей стороны. Существует также возможность использования сокетов для связи между программами, для которых не требуется установить на компьютер тяжелый экземпляр IIS.

Ответ 2

Я автор jni4net, межпроцессный мост с открытым исходным кодом между JVM и CLR. Он построен на вершине JNI и PInvoke. Не требуется код C/С++. Надеюсь, это поможет вам.

Ответ 3

Вы посмотрели IKVM?

Ответ 4

Вы изучили интерфейс Java Native?

То, что я делал в прошлом, - это написать библиотеку C, которая может быть вызвана как с Java, так и с .NET(а также с языком сценариев COM, NSIS и другими технологиями).

JNI будет работать хорошо, если вы хотите только разоблачить несколько методов, но это может стать громоздким, если вы хотите, например, разоблачить всю платформу .NET из-за количества файлов заголовков и методов оболочки, которые вы бы необходимо создать.

Ответ 5

Мы попробовали IKVM в нашей производственной среде, но он все время рушился. Мы используем JNBridge, который является коммерческим продуктом, но он очень стабилен и хорошо работает в нашей среде ASP.NET.

Ответ 6

Если вы хотите запустить Java-код под .NET(или Mono), это можно сделать с помощью IKVM.

Потому что (насколько я знаю) текущие компиляторы Java не читают сборки .NET, есть 2 шага. Сначала вам нужно создать заглушку JAR, содержащую фиктивные классы и методы с подписями сборки .NET, которые вы хотите использовать, чтобы javac (или ваша IDE) знает, какие методы доступны. Например, если вы хотите использовать что-то в основной стандартной библиотеке .NET с Java, запустите

ikvmstub mscorlib

который генерирует заглушку mscorlib.jar. (Он нашел сборку Mono mscorlib.dll для меня автоматически под Linux, но если она не удалась, возможно, вам придется предоставить полный путь к DLL.)

Затем вы можете записать файл Java, который его использует, например. (на основе примера из документации IKVM):

import cli.System.IO.Directory;
public class IKVMTest {
    public static void main(String[] args) {
        for(String file : Directory.GetFiles(".")) // From .NET standard library
            System.out.println(file);              // From Java standard library
    }
}

Обратите внимание, что пакеты CLI имеют префикс cli., поэтому вместо System import cli.System следует импортировать cli.System.

Чтобы скомпилировать, включите JAR-заглушку в путь к классам:

javac -classpath mscorlib.jar IKVMTest.java

Так как привязка Java происходит во время выполнения, выходные файлы class используют методы требуемых имен и подписей, но вы можете поменять методы заглушки с помощью реальных методов .NET при запуске под IKVM:

ikvm IKVMTest

и он будет печатать файлы в текущем каталоге, вызывая методы .NET.