IKVM - использование сгенерированной сборки (из JAR) вызывает исключение MissingMethodException в инициализаторе типа

У нас возникла проблема с DLL .NET, которая была преобразована из файла jar с помощью ikvmc. При попытке создать экземпляр «My» мы видим ошибку ниже (это результат метода расширения printStackTrace, находящегося в «ikvm.extensions», поскольку, похоже, это то, что ищут люди, знающие о IKVM).

Класс «App» в коде Java наследуется от Hashtable. Кроме того, когда мы используем ikvmc для создания исполняемого файла (а не dll) из того же файла jar (на этот раз с помощью метода Main, установленного в файле манифеста) и запускаем этот exe-файл, все работает нормально. «My» создается в методе Main Java-кода, и все работает нормально.

java.lang.ExceptionInInitializerError
    at App.<init>(App.java)
    at My.<init>(My.java:107)
    at cli.Tests.Program.Main(Program.cs:58)
    at cli.System.AppDomain._nExecuteAssembly(Unknown Source)
    at cli.System.AppDomain.ExecuteAssembly(Unknown Source)
    at cli.Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly(Unknown Source) Caused by: cli.System.MissingMethodException: Method not found: 'Void java.util.Hashtable.__<clinit>()'.
    at cli.Tests.Program.Main(Program.cs:65)
    ... 3 more

Есть идеи, что мы можем сделать по-другому, чтобы обойти это? Если вам интересно, мы включили IKVM через Nuget, поэтому включены 28 сборок IKVM, да.


person larsbeck    schedule 01.05.2015    source источник


Ответы (1)


Мне удалось решить проблему. Как объясняется здесь (MissingMethodException с использованием IKVM), версия ikvmc должна соответствовать версиям сборки, которые вы используются в проекте .NET.

person larsbeck    schedule 02.05.2015