2017-03-10 19 views
6

Tôi gặp sự cố khi yêu cầu API ASP.NET Core 64 bit của mình chạy trên Dịch vụ ứng dụng Azure. Lỗi tôi nhận được là:Cách thay đổi Dịch vụ ứng dụng Azure thành 64-bit

Ngoại lệ: Hệ thống.BadImageFormatException: Không thể tải tệp hoặc lắp ráp '***. Dll'. Một nỗ lực đã được thực hiện để tải một chương trình với một định dạng không chính xác.

Tôi hiểu rằng điều này có nghĩa là có sự không khớp giữa nền tảng của ứng dụng (64 bit) và môi trường mà ứng dụng chạy trên đó. Tôi chỉ không thể tìm ra cách thay đổi Dịch vụ ứng dụng để nó chạy bằng 64 bit.

Trong Cài đặt ứng dụng trong cổng Azure tôi đã thiết lập nền tảng để 64-bit:

enter image description here

Tuy nhiên khi tôi kiểm tra trong Kudu, môi trường runtime chỉ ra rằng nó hoạt động theo win8-x86:

enter image description here

project.json

"buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true, 
    "platform": "x64" 
}, 

"runtimes": { 
    "win10-x64": {} 
} 

Một số câu hỏi

  1. Làm thế nào để thay đổi các dịch vụ ứng dụng để đảm bảo nó đang chạy trên một nền tảng 64-bit?
  2. Có quan trọng là RID là win8... khi cấu hình thời gian chạy của tôi ở project.json chỉ định win10.... Có lẽ x86 vs x64 vấn đề, nhưng nó cần phải được phiên bản tương tự của cửa sổ quá tức là. win8 vs win10.
+0

Tôi gặp vấn đề tương tự. Có bất kỳ bản cập nhật về điều này? –

+0

@TamasPataky Cảm ơn bạn đã nhắc tôi - Tôi sẽ cập nhật với câu trả lời tôi nhận được từ sự hỗ trợ – ajbeaven

Trả lời

4

TLDR; 64 bit Quy trình lõi .NET sử dụng thời gian chạy lõi .NET (trái ngược với thời gian chạy .NET Framework) chưa được hỗ trợ trên Azure nhưng được lên kế hoạch sẽ đến trong tương lai.


Sau đây là các cuộc thảo luận mà tôi đã hỗ trợ với Microsoft Azure.

Cấu hình 64bit/32 bit trên cổng Azure (được hiển thị ở trên trong ảnh chụp màn hình của tôi), điều khiển quá trình IIS w3wp.exe. Quá trình w3wp.exe chuyển tiếp các yêu cầu đến tiến trình lõi NET của bạn. Cấu hình không kiểm soát độ bit của quá trình lõi .NET. Đó là một chút khó hiểu, nhưng giải thích tại sao thay đổi tùy chọn Platform trong screneshot ở trên không có ảnh hưởng.

Dựa trên cài đặt biến môi trường PATH của dịch vụ ứng dụng, dotnet.exe được ánh xạ tới bản 32 bit, đó là "D: \ Program Files (x86) \ dotnet \ dotnet.exe". Thời gian chạy 64 bit của lõi .NET không được cài đặt sẵn trong các dịch vụ ứng dụng, do đó, nó hiện không có sẵn.

Microsoft đang có kế hoạch thêm hỗ trợ 64 bit cho các ứng dụng lõi .NET chạy trên thời gian chạy lõi .NET trong Azure nhưng nó phụ thuộc vào bản cập nhật trong tương lai của chuỗi công cụ lõi .NET. Họ đã cho tôi một ngày nội bộ ước tính nhưng tôi hứa tôi sẽ không chia sẻ công khai.

Cách giải quyết mà họ đã cho tôi là sử dụng ASP.NET core (sử dụng khuôn khổ .net) mẫu studio trực quan, chứ không phải ASP.NET lõi (sử dụng lõi .net) một. Một trong đó tải thời gian chạy khung .Net 64 bit cho ứng dụng web lõi ASP.Net của bạn. Điều này sẽ đòi hỏi một chút công việc di chuyển và tôi cho rằng có thể không khả thi đối với một số dự án.

May mắn thay tôi đã có thể trao đổi với phiên bản 32 bit của một số phụ thuộc của tôi có nghĩa là ứng dụng hoạt động trong môi trường Azure. Đáng buồn thay, điều này sẽ không có ý nghĩa với những người không có lựa chọn này, và tôi chắc chắn có rất nhiều.

+0

Mọi cập nhật về ETA? – MartinH

+1

Đây là ETA tốt nhất mà tôi có thể tìm thấy. Nó đã được chuyển sang "kế hoạch" 6 tháng trước, nhưng không có cập nhật từ: https://feedback.azure.com/forums/169385-web-apps/suggestions/16049980-install-64-bit-dotnet-exe-runtime – yfisaqt

Các vấn đề liên quan