Я успешно сгенерировал прокси от Java до .NET с помощью jni4net proxygen.Сейчас я пытаюсь создать решение .NET в Visual Studio 2017 и использовать прокси-серверы Java в консольной программе .NET.Я импортировал .dll из прокси-сервера, и он, кажется, работает, так как Visual Studio автоматически заполняет мои классы Java (TempClientMain
) и не показывает никаких ошибок.
namespace ConsoleApp1
class Program
{
static void Main()
{
var setup = new BridgeSetup(string[] args);
setup.Verbose = true;
setup.AddAllJarsClassPath("./");
Bridge.CreateJVM(setup);
Bridge.RegisterAssembly(typeof(TempClientMain).Assembly);
TempClientMain test = new TempClientMain();
test.run();
}
}
Когда я, однако, собираюи запустить его, я получаю следующий вывод cmd:
loading core from C:/Users/Ruben/source/repos/ConsoleApp1/ConsoleApp1/bin/x64/Debug/jni4net.n-0.8.8.0.DLL
loading jni4net.n-0.8.8.0, Version=0.8.8.0, Culture=neutral, PublicKeyToken=134a23405600bab4 from C:\Users\Ruben\source\repos\ConsoleApp1\ConsoleApp1\bin\x64\Debug\jni4net.n-0.8.8.0.dll
loaded jni4net.n-0.8.8.0, Version=0.8.8.0, Culture=neutral, PublicKeyToken=134a23405600bab4 from C:\Users\Ruben\source\repos\ConsoleApp1\ConsoleApp1\bin\x64\Debug\jni4net.n-0.8.8.0.dll
Initialized jni4net core
core loaded from C:/Users/Ruben/source/repos/ConsoleApp1/ConsoleApp1/bin/x64/Debug/jni4net.n-0.8.8.0.DLL
clr.version :v4.0.30319
clr.arch :64bit
java.home :C:\Program Files\Java\jdk1.8.0_161
java.version :1.8.0_161
sun.arch.data.model :64
loading mediasense.j4n, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null from C:\Users\Ruben\source\repos\ConsoleApp1\ConsoleApp1\bin\x64\Debug\mediasense.j4n.dll
Unhandled Exception: net.sf.jni4net.jni.JNIException: Can't load java class for *MY TARGET PACKAGE PATH* from classLoader sun.misc.Launcher$AppClassLoader@c387f44 ---> java.lang.ClassNotFoundException: *MY TARGET PACKAGE PATH*
at net.sf.jni4net.jni.JNIEnv.ExceptionTest()
at net.sf.jni4net.jni.JNIEnv.CallObjectMethodPtr(IJvmProxy obj, MethodId methodIdNative, Value[] args)
at java.lang.ClassLoader.loadClass(String par0)
at net.sf.jni4net.utils.Registry.LoadClass(String name, ClassLoader classLoader, JNIEnv env)
--- End of inner exception stack trace ---
at net.sf.jni4net.utils.Registry.LoadClass(String name, ClassLoader classLoader, JNIEnv env)
at net.sf.jni4net.utils.Registry.RegisterClass(RegistryRecord record, ClassLoader classLoader, JNIEnv env)
at net.sf.jni4net.utils.Registry.BindJvm(RegistryRecord record, ClassLoader classLoader, JNIEnv env)
at net.sf.jni4net.utils.Registry.BindJvm(RegistryRecord record, JNIEnv env)
at net.sf.jni4net.utils.Registry.RegisterType(Type type, Boolean bindJVM, JNIEnv env)
at net.sf.jni4net.utils.Registry.RegisterAssembly(Assembly assembly, Boolean bindJVM)
at net.sf.jni4net.Bridge.RegisterAssembly(Assembly assembly)
at ConsoleApp1.Program.Main(String[] args) in C:\Users\Ruben\source\repos\ConsoleApp1\ConsoleApp1\Program.cs:line 21
Press any key to continue . . .
Он загружается нормально, но, похоже, не находит целевой папки.Где я написал МОЙ ЦЕЛЕВОЙ ПАКЕТ показан путь к пакету, идентичный целевой папке проксигенов (заглавные буквы отсутствуют).Где я должен положить это, чтобы программа .NET могла его найти?Я попытался вставить папку в корень проекта и готовую папку сборки.Я также получаю сообщение об ошибке, когда не включаю его вообще.Я не очень знаком с Visual Studio, так что есть ли другой способ, чем просто вставить его, чтобы включить его?