Có một số điều (codeproject, blog1, blog2, forum) để sử dụng thư viện WinRT vào giao diện điều khiển ứng dụng .Net Framework trong Windows 8.tải thư viện UWP vào NET ứng dụng Khung
Tôi đã thử nó với UWP trong Windows 10. Nhưng không thành công. Tôi vật lộn để biên dịch mà không có lỗi, nhưng nó xảy ra BadImageFormatException
trong thời gian chạy.
Đây là những gì tôi đã làm.
- Tạo ứng dụng Bảng điều khiển với Khuôn khổ .NET 4.6.1.
- Chỉnh sửa tệp .csproj để thêm
<TargetPlatformVersion>10.0</TargetPlatformVersion>
- Tham khảo ba thư viện như sau.
- c: \ Program Files (x86) \ Windows Kits \ 10 \ UnionMetadata \ Windows.winmd (thể hiện của Windows Runtime 1.4)
- c: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETCore \ v4.5.1 \ System.Runtime.WindowsRuntime.dll (hiển thị 4.0.10.0)
- c: \ Program Files (x86) \ Tham chiếu Assemblies \ Microsoft \ Framework.NETCore \ v4.5.1 \ System.Runtime.InteropServices.WindowsRuntime .dll (hiển thị 4.0.0.0)
Ngược lại với ví dụ về Windows 8, có erro r khi System.Runtime.dll
được tham chiếu.
Mã như sau. Lưu ý rằng mã là từ Microsoft forum.
class Program
{
static void Main(string[] args)
{
Geolocator locator = new Geolocator();
var status = Geolocator.RequestAccessAsync();
if (status != null)
{
Console.WriteLine("not null");
Task.Run(async() =>
{
Geoposition pos = await locator.GetGeopositionAsync();
Console.WriteLine(pos.Coordinate.Accuracy);
});
}
else
{
Console.WriteLine("null");
}
Console.ReadLine();
}
Biên dịch là OK và not null
được hiển thị trong bảng điều khiển. Vì vậy, yêu cầu của thư viện chính nó có vẻ tốt. Nhưng GetGeopositionAsync
gây ra BadImageFormatException
.
Chi tiết thư ngoại lệ như sau.
ngoại lệ ném: 'System.BadImageFormatException' trong mscorlib.dll
thông tin bổ sung: Không thể tải tập tin hoặc lắp ráp 'System.Runtime.WindowsRuntime, Version = 4.0.10.0, Văn hóa = trung tính, PublicKeyToken = b77a5c561934e089 'hoặc một trong các phụ thuộc của nó. Tham chiếu hội đồng không nên được nạp để thực hiện. Chúng chỉ có thể được tải trong bối cảnh trình tải chỉ Reflection. (Ngoại lệ từ HRESULT: 0x80131058)
Tôi đã cố gắng (1) để thay đổi build cấu hình để x86/x64/AnyCPU (2) và để thiết lập Copy địa phương true cho tất cả các tài liệu tham khảo, nhưng lỗi tương tự xảy ra.
Theo tôi, ngoại lệ này là nói System.Runtime.WindowsRuntime
cố gắng tải một số thư viện phụ thuộc nội bộ nhưng tôi không biết nó là gì.
Bạn không thể thực hiện các cụm tham chiếu. Đặt thuộc tính Sao chép cục bộ thành Sai và sử dụng Xây dựng> Làm sạch. Nhấn F5 và bây giờ bạn thấy vấn đề thực sự, bạn không có phiên bản 4.0.10.0 của các hội đồng này trên máy của bạn. DLL Hell gõ cửa của bạn, đó không phải là bất thường của khóa học. Nên được lấy từ Nuget nhưng điều đó sẽ không làm việc, hoặc sai vị dự án. Sử dụng các hội đồng tham chiếu từ 4.5 hoạt động tốt trên máy tính của tôi. –
@HansPassant // thanks, tiếp theo là câu trả lời và bình luận của bạn, tôi đã thay đổi Copy Local thành 'false' và Clean project làm cho nó hoạt động. – Youngjae