Tôi đã chạy thư viện Android của bên thứ 3 thông qua phiên bản IKVM của CodenameOne và đã nhập thành công tệp .dll đầu ra làm tham chiếu cho ứng dụng UWP của tôi trong Visual Studio. Khi cố gắng biên dịch dự án, tôi gặp lỗi xây dựng:
(từ cửa sổ danh sách lỗi)
Không thể tìm thấy loại System.ApplicationException trong mô-đun CommonLanguageRuntimeLibrary
(từ cửa sổ đầu ra)
Tệp chương trình (x86)\MSBuild\Microsoft\WindowsXaml\v14.0\8.2\Microsoft.Windows.UI.Xaml.Common.target(352,5): Lỗi nội bộ Xaml WMC9999: Không thể tìm thấy loại System.ApplicationException trong mô-đun CommonLanguageRuntimeLibrary .
Theo như tôi đọc được,System.ApplicationException
Trong .Net cho UWP không được dùng nữa, bạn chỉ nên sử dụng System.Exception
Tôi không biết cách giải quyết và/hoặc khắc phục sự cố này vì nó đến từ thư viện chứ không phải mã của riêng tôi.
Cảm ơn trước.
Cổng IKVM của chúng tôi không thể khóa được hoàn toàn. IKVM được biên dịch bằng .Net 2.0 và chia nhỏ một số nội dung (như nội dung phản chiếu, một số nội dung ngày tháng, luồng, v.v.) bằng cách sử dụng các giao diện cần được đưa vào dự án UWP sử dụng nó.
Nếu bạn chưa triển khai các giao diện này hoặc bạn đang sử dụng đường dẫn mã CN1 mà chúng tôi không cần thì có thể bạn đang làm việc trên các phần thời gian chạy JDK hoặc IKVM của các lớp .Net 2.0 (chẳng hạn như ngoại lệ này).
Hiện tại chỉ có hai giao diện cần được triển khai trong dự án UWP của bạn:
- Trình trợ giúp RuntimeReflection.
- Trình trợ giúp chủ đề gốc
Bạn có thể xem chúng được khởi tạo như thế nào trên cổng CN1đây
Sau đây là Trình trợ giúp phản ánh thời gian chạy thực hiện và Trình trợ giúp chủ đề gốc
Việc triển khai những điều này trong dự án UWP giải quyết thực tế là IKVM được biên dịch cho .Net 2.0, vì vậy những triển khai này có thể sử dụng trực tiếp API UWP.
Thậm chí sau đó, bạn có thể gặp vấn đề. Cổng IKVM này được phát triển cùng với cổng CN1, cổng này thực sự chỉ được thử nghiệm cho trường hợp sử dụng của chúng tôi. Nếu chúng ta không cần CN1, một số phương pháp phổ biến có thể không được triển khai.
Một số hạn chế khác bạn cần lưu ý:
Nếu bạn muốn mã được biên dịch IKVM trong dự án của mình tham chiếu lẫn nhau, chúng phải là một phần của một tệp .dll. Ví dụ. Nếu hai thư viện lib1.jar và lib2.jar được biên dịch thành lib1.dll và lib2.dll thì mã trong lib1 không thể tham chiếu các lớp trong lib2 và ngược lại. Trong CN1, tôi đã gói tất cả các tệp .class vào một .jar trước khi chạy nó qua IKVM, vì vậy đây không phải là vấn đề đối với chúng tôi (vì vậy tôi không mất quá nhiều thời gian để sửa nó).
Nếu mục tiêu của bạn là xuất bản lên Windows Store thì hiện có một lỗi trong chuỗi công cụ DotNetNative của họ khiến nó chặn các phương thức được đồng bộ hóa có chứa các khối thử/bắt. Microsoft có thể khắc phục điều này trong bản phát hành trong tương lai, nhưng tôi đã giải quyết nó bằng cách chạy chuyển đổi trước trên tất cả các lớp để chuyển đổi tất cả các phương thức đó thành dạng được chuỗi công cụ gốc chấp nhận được. HereÁp dụng quá trình tiền xử lý này như một phần của nhiệm vụ ANT. Herelà một dự án giống như bộ tiền xử lý được sử dụng để thực hiện các tác vụ ANT tiền xử lý thực tế.
Như tôi đã nói trước đây, bạn có thể gặp khó khăn nếu khám phá bên ngoài những con đường đã được rèn sẵn.
Tôi là một lập trình viên xuất sắc, rất giỏi!