Есть ли способ удалить нативный код в UWP-приложениях Visual Studio ДО достижения нативного компилятора? - PullRequest
0 голосов
/ 08 января 2020

У меня есть некоторый код Java, который необходимо сделать доступным в UWP-приложении, и я использую IKVM для компиляции DLL этого кода. Это работает довольно хорошо в режиме DEBUG, но завершается с ошибками в режиме RELEASE и используемым потом. NET Собственный набор инструментов:

Schweregrad Code    Beschreibung    Projekt Datei   Zeile   Unterdrückungszustand
Fehler      Die Methode "WinFormsMessageLoop.Invoke(Delegate)" löst immer eine Ausnahme aufgrund der fehlenden Methode "Control.Invoke(Delegate)" aus in der Assembly "System.Windows.Forms" aus. Möglicherweise fehlt eine Assembly oder eine Abhängigkeit von einer neueren Windows SDK-Version.  Ams.Oms.Poc         
Fehler      Der Typ "System.Windows.Forms.MenuItem" von der Assembly "System.Windows.Forms" war nicht in der Kompilierung enthalten, es wurde jedoch in "Typ "ikvm.awt.NetMenuPeer"" darauf verwiesen. Möglicherweise fehlt eine Assembly oder eine Abhängigkeit von einer neueren Windows SDK-Version. Ams.Oms.Poc         
Fehler      Der Typ "System.Windows.Forms.KeyEventHandler" von der Assembly "System.Windows.Forms" war nicht in der Kompilierung enthalten, es wurde jedoch in "Methode "NetComponentPeer.hookEvents()"" darauf verwiesen. Möglicherweise fehlt eine Assembly oder eine Abhängigkeit von einer neueren Windows SDK-Version. Ams.Oms.Poc         
Fehler      Der Typ "System.Drawing.Drawing2D.ColorBlend" von der Assembly "System.Drawing.Common" war nicht in der Kompilierung enthalten, es wurde jedoch in "Methode "NetGraphics.setPaint(Paint)"" darauf verwiesen. Möglicherweise fehlt eine Assembly oder eine Abhängigkeit von einer neueren Windows SDK-Version.   Ams.Oms.Poc         
[...]
Fehler      Die Methode "NetWindowPeer.getGraphics()" löst immer eine Ausnahme aufgrund der fehlenden Methode "Control.get_ClientRectangle()" aus in der Assembly "System.Windows.Forms" aus. Möglicherweise fehlt eine Assembly oder eine Abhängigkeit von einer neueren Windows SDK-Version.  Ams.Oms.Poc         
Fehler      Die Methode "NetToolkit.createImage(byte[], int, int)" löst immer eine Ausnahme aufgrund der fehlenden Methode "Bitmap..ctor(Stream)" aus in der Assembly "System.Drawing" aus. Möglicherweise fehlt eine Assembly oder eine Abhängigkeit von einer neueren Windows SDK-Version.    Ams.Oms.Poc         
Fehler      Die Methode "NetMouseInfoPeer.fillPointWithCoords(Point)" löst immer eine Ausnahme aufgrund der fehlenden Methode "Cursor.get_Position()" aus in der Assembly "System.Windows.Forms" aus. Möglicherweise fehlt eine Assembly oder eine Abhängigkeit von einer neueren Windows SDK-Version.  Ams.Oms.Poc

Просто отключение использования Встроенный набор инструментов в настройках сборки RELEASE-режима решает эти проблемы, но полученное приложение все еще не может быть опубликовано в магазине приложений:

Ошибка проверки принятия пакета: Этот пакет не был создан для сдача в магазин. Убедитесь, что вы загружаете сборку Release с включенной цепочкой инструментов. NET.

Дело в том, что мне не нужен какой-либо проблемный c собственный код для моего собственного Java код, но вместо этого все проблемные c функции и ссылки поступают из некоторой GUI связанной DLL самой IKVM. Мне также не нужна эта DLL, но по какой-то причине она должна быть доступна в проекте для выполнения зависимостей, или она уже не может быть скомпилирована в режиме DEBUG. Но, в конце концов, ничего этого не требуется во время выполнения.

Так что мне интересно, есть ли какой-либо шаг, или настройка, или «хитрость» для удаления нативного кода, ДО того, как нативный набор инструментов увидит его и каким-либо образом столкнется с ошибками? Что-то вроде дополнительного фильтра или чего-то в этом роде.

Все остальное, кажется, заставляет меня как-то менять и исправлять эти проблемы в IKVM, что, скорее всего, тоже нетривиально. В лучшем случае я могу просто комментировать ненужный код или сделать так, чтобы другие библиотеки DLL больше не зависели от неисправной IKVM.OpenJDK.SwingAWT-DLL или тому подобного.

...