Наш порт IKVM не совсем под ключ. IKVM скомпилирован с использованием .Net 2.0, и некоторые вещи (например, материал отражения, некоторые вещи даты, потоки и т. Д.) Учитываются с использованием интерфейсов, которые необходимо включить в проект UWP, который его использует.
Если вы не реализовали эти интерфейсы или используете пути кода, которые нам не нужны для CN1, тогда вы можете приступать к части JDK или IKVM, которые используют классы .NET 2.0 (например, это исключение).
В настоящее время существует только два интерфейса, которые должны быть реализованы в вашем UWP проекте:
- RuntimeReflectionHelper.
- NativeThreadHelper
Вы можете увидеть, в порту CN1, как они инициализируются here
Вот реализаций для RuntimeReflectionHelper и NativeThreadHelper
Реализация этих внутри проекта UWP получает вокруг того, что IKVM скомпилирован для .Net 2.0, так что эти реализации могут напрямую использовать API UWP.
Даже при этом вы, вероятно, столкнетесь с проблемами. Этот порт IKVM развивается вдоль порта CN1, и он действительно проверяется только на случаи использования. Некоторые общие методы могут быть не реализованы, если мы не требовали их для CN1.
Некоторые другие ограничения, вы должны знать:
IKVM скомпилированный код в проекте должен быть частью одного файла .dll, если вы хотите, чтобы обратиться друг к другу. Например. Если вы скомпилируете две библиотеки lib1.jar и lib2.jar в lib1.dll и lib2.dll, тогда код из lib1 не может ссылаться на классы из lib2 и наоборот. В CN1 я объединяю все .class файлы в один .jar, прежде чем запускать его через IKVM, так что это не проблема для нас (следовательно, я не тратил много времени, пытаясь исправить это).
Если ваша цель состоит в публикации в хранилище Windows, в настоящее время в их инструментальной цепочке DotNetNative есть ошибка, которая заставляет его задувать синхронизированные методы, включающие блоки try/catch.Вероятно, это будет исправлено Microsoft в будущих выпусках, но я обойду это, выполнив предварительное преобразование для всех классов, чтобы преобразовать все такие методы в форму, приемлемую для их собственной инструментальной цепочки. Here - часть нашей задачи ANT, которая применяет эту предварительную обработку. Here - это проект препроцессора класса для задачи ANT, который используется для фактической предварительной обработки.
Как я уже говорил, ожидайте столкнуться с трудностями, если вы исследуете за пределами уже пройденных троп.
http://stackoverflow.com/questions/24217509/cannot-find-type-system-applicationexception-in-module-mscorlib-dll-error-in-win – GANI
@GANI не является рабочим/принятым ответом. – JM8s
Я попросил Стив попробовать и помочь вам здесь. Я знаю, что мы много боролись с крайними случаями, связанными с UWP и ужасными сообщениями об ошибках/сбоями. –