2016-09-25 5 views
2

Я запустил стороннюю библиотеку Android через версию IKVM CodenameOne и успешно импортировал вывод .dll в качестве ссылки на мое приложение UWP в Visual Studio. При попытке компиляции проекта я получаю одну ошибку сборки:Не удается найти тип System.ApplicationException в модуле CommonLanguageRuntimeLibrary

(из списка ошибок окна)

Cannot find type System.ApplicationException in module CommonLanguageRuntimeLibrary

(из окна Output)

Program Files (x86)\MSBuild\Microsoft\WindowsXaml\v14.0\8.2\Microsoft.Windows.UI.Xaml.Common.targets(352,5): Xaml Internal Error error WMC9999: Cannot find type System.ApplicationException in module CommonLanguageRuntimeLibrary.

Из того, что я прочитал System.ApplicationException амортизируется в .Net для UWP, и вместо этого вы должны использовать только System.Exception

Я не знаю, как работать и/или исправлять это, поскольку это происходит из библиотеки, а не моего собственного кода.

Заранее спасибо.

+0

http://stackoverflow.com/questions/24217509/cannot-find-type-system-applicationexception-in-module-mscorlib-dll-error-in-win – GANI

+0

@GANI не является рабочим/принятым ответом. – JM8s

+0

Я попросил Стив попробовать и помочь вам здесь. Я знаю, что мы много боролись с крайними случаями, связанными с UWP и ужасными сообщениями об ошибках/сбоями. –

ответ

0

Наш порт IKVM не совсем под ключ. IKVM скомпилирован с использованием .Net 2.0, и некоторые вещи (например, материал отражения, некоторые вещи даты, потоки и т. Д.) Учитываются с использованием интерфейсов, которые необходимо включить в проект UWP, который его использует.

Если вы не реализовали эти интерфейсы или используете пути кода, которые нам не нужны для CN1, тогда вы можете приступать к части JDK или IKVM, которые используют классы .NET 2.0 (например, это исключение).

В настоящее время существует только два интерфейса, которые должны быть реализованы в вашем UWP проекте:

  1. RuntimeReflectionHelper.
  2. NativeThreadHelper

Вы можете увидеть, в порту CN1, как они инициализируются here

Вот реализаций для RuntimeReflectionHelper и NativeThreadHelper

Реализация этих внутри проекта UWP получает вокруг того, что IKVM скомпилирован для .Net 2.0, так что эти реализации могут напрямую использовать API UWP.

Даже при этом вы, вероятно, столкнетесь с проблемами. Этот порт IKVM развивается вдоль порта CN1, и он действительно проверяется только на случаи использования. Некоторые общие методы могут быть не реализованы, если мы не требовали их для CN1.

Некоторые другие ограничения, вы должны знать:

  1. IKVM скомпилированный код в проекте должен быть частью одного файла .dll, если вы хотите, чтобы обратиться друг к другу. Например. Если вы скомпилируете две библиотеки lib1.jar и lib2.jar в lib1.dll и lib2.dll, тогда код из lib1 не может ссылаться на классы из lib2 и наоборот. В CN1 я объединяю все .class файлы в один .jar, прежде чем запускать его через IKVM, так что это не проблема для нас (следовательно, я не тратил много времени, пытаясь исправить это).

  2. Если ваша цель состоит в публикации в хранилище Windows, в настоящее время в их инструментальной цепочке DotNetNative есть ошибка, которая заставляет его задувать синхронизированные методы, включающие блоки try/catch.Вероятно, это будет исправлено Microsoft в будущих выпусках, но я обойду это, выполнив предварительное преобразование для всех классов, чтобы преобразовать все такие методы в форму, приемлемую для их собственной инструментальной цепочки. Here - часть нашей задачи ANT, которая применяет эту предварительную обработку. Here - это проект препроцессора класса для задачи ANT, который используется для фактической предварительной обработки.

Как я уже говорил, ожидайте столкнуться с трудностями, если вы исследуете за пределами уже пройденных троп.